问题:
子线程循环 10 次,接着主线程循环 100 次,接着又回到子线程循环 10 次,接着再回到主线程又循环 100 次,如此循环50次,试写出代码。
解答:这里我们将题简化为 “子线程循环2次,接着主线程循环 4次,接着又回到子线程循环 2次,接着再回到主线程又循环 4 次,如此循环5次,试写出代码”
HANDLE g_eventMain;
HANDLE g_eventSon;
unsigned int __stdcall threadFunc(LPVOID param)
{
for(int j =0; j<5; ++j)
{//这里子线程也要有一个对总输出次数的循环控制
WaitForSingleObject(g_eventMain,INFINITE);
for (int i = 0; i<2; ++i)
{
cout <<" 子线程输出"<<i <<endl;
}
SetEvent(g_eventSon);
}
return 0;
}
int main(int argc,char ** argv)
{
g_eventMain = CreateEvent(NULL,false,true,NULL);
g_eventSon = CreateEvent(NULL,false,false,NULL);
HANDLE hdl = (HANDLE)_beginthreadex(NULL,0,threadFunc,NULL,0,NULL);
for (int i = 0; i<5; ++i)
{
WaitForSingleObject(g_eventSon,INFINITE);
for (int j =0; j<4; ++j)
{
cout <<"主线程输出"<<j<<endl;
}
SetEvent(g_eventMain);
}
CloseHandle(hdl);
CloseHandle(g_eventMain);
CloseHandle(g_eventSon);
return 0;
}