问题:
子线程循环 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; }