我这个多线程程序,为什么先退出程序后输出结果?
- 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");}