首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

小弟我这个多线程程序,为什么先退出程序后输出结果

2012-10-10 
我这个多线程程序,为什么先退出程序后输出结果?C/C++ codeint count [200]int g_sum 200CRITICAL_SECT

我这个多线程程序,为什么先退出程序后输出结果?

C/C++ code
int count [200];int g_sum = 200;CRITICAL_SECTION g_cs;DWORD __stdcall SecondThread(void*);DWORD __stdcall FirstThread(void*){    EnterCriticalSection(&g_cs);    DWORD d;    CreateThread(0, 0, SecondThread, 0, 0, &d);    for(int n = 1; n<= g_sum; n++)    {        Sleep(1);        count[n-1] = n;    }    LeaveCriticalSection(&g_cs);    return 0;}DWORD __stdcall SecondThread(void*){    EnterCriticalSection(&g_cs);    for(int n = 1; n<= g_sum; n++)        cout<< count[n-1] <<"\t";    LeaveCriticalSection(&g_cs);    return 0;}void main(){    ::_wsetlocale(LC_ALL, L"");    InitializeCriticalSection(&g_cs);    DWORD d;    CreateThread(0, 0, FirstThread, 0, 0, &d);    Sleep(2000);    system("pause");}



[解决办法]
这是最正常的效果啊,
程序没有退出,只是运行到system("pause");而已了。

因为主进程运行的速度非常快。比自己建立线程运行快呀
CreateThread之后大家就2边一起运行了
[解决办法]
程序没有问题,测试正常
[解决办法]
这是正常的,它们的先后顺序不一定的,
楼主用了
CreateThread(0, 0, FirstThread, 0, 0, &d);
创建线程,我设创建的这个线程为A线程。
创建线程执行完后,主线程 Sleep(2000),而在主线程Sleep执行完之前,A线程就执行完了,就能看见全部输出结果。
相反,如果A线程抢不到资源,那么主线程先执行,自然,就会先看见system("pause")了。

如果楼主想达到先看见A线程,可以用
// 创建并记录线程
HANDLE threadTemp = CreateThread(0, 0, FirstThread, 0, 0, &d);
// 等待线程结束
WaitForSingleObject(threadTemp, INFINITE);
// 关闭句柄
CloseHandle(threadTemp);
最后再 system("pause");

也就是说:
C/C++ code
void main(){    ::_wsetlocale(LC_ALL, L"");    InitializeCriticalSection(&g_cs);    DWORD d;     // 创建并记录线程     HANDLE threadTemp = CreateThread(0, 0, FirstThread, 0, 0, &d);     // 等待线程结束     WaitForSingleObject(threadTemp, INFINITE);     // 关闭句柄     CloseHandle(threadTemp);    system("pause");} 

热点排行