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");
}
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");也就是说:
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");
}