在主線程定要禁止使用waitforsingleobject(),原因是會阻塞主線程的消息循環,所以必須使用另一種 MsgWaitForMultipleObjects,即可以讓消息通過,下面就是一個基於MsgWaitForMultipleObjects與Event,實現多線程同步這樣。
HANDLE g_Handle;//全局的句柄 g_Handle=CreateEvent(NULL,FALSE,FALSE,NULL); ResetEvent(g_Handle); //無信號,即阻塞了 //block here till the event was signal while(TRUE) { DWORD result; MSG msg; result=MsgWaitForMultipleObjects(1,&g_Handle,FALSE,INFINITE,QS_ALLINPUT); if(WAIT_OBJECT_0 == result) break; PeekMessage(&msg,NULL,0,0, PM_REMOVE); DispatchMessage(&msg); } //在另一個線程調用setEvent(g_Handle);即變為有信號狀態,阻塞即解除 //do something~
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
更多文章:http://blog.csdn.net/what951006?viewmode=list
powered by:小烏龜在大烏龜背上~
