Win32 中等待线程调用的结束

Win32 中等待线程调用的结束

  
   如果在.net中一个线程等待另外一个线程的完成,可以使用System.Threading.Thread.Join, 在Win32 下的相应的等效代码   
1  WaitForSingleObject(hThread,INFINITE);
2 
3  CloseHandle(hThread);
   Win32 中CreateThread出来的hThread属于整个Process,线程中的回调函数结束后,不会失效,只有调用者调用CloseHandle,才最后真正的释放系统中Thread 的资源.
  
   如果线程的回调函数已经结束,那么hThread 处于激活状态,WaitForSignleObject 便能获取到当前状态,成功返回;如果没有,WaitForSignleObject 便一直等待线程的回调结束.

   如果你想一个线程中等待另外一个线程回调结束的同时,进行消息MSG的分发,或者做其他的事情.例如主UI线程在等待工作线程完成的同时,需要更新UI上的进度条,这时可以让工作线程发送进度消息MSG给主UI线程,主UI线程接受到消息MSG更新UI.可以在主UI线程中使用MsgWaitForMultipleObjects函数达到这一效果, 
 1  MSG msg;
 2 
 3  BOOL bLoop = TRUE;
 4 
 5  while (bLoop)
 6  {
 7 
 8       int  nWait = MsgWaitForMultipleObjects( 1 , & hThread,FALSE, 3000 ,QS_ALLEVENTS);
 9       switch (nWait) 
10      {
11       case  WAIT_TIMEOUT:
12       case  WAIT_OBJECT_0 + 1 :
13          {
14               while ( PeekMessage(  & msg, NULL,  0 0 , PM_REMOVE ) ) {
15                  TranslateMessage( & msg);
16                  DispatchMessage(  & msg );
17              }
18               break ;
19          }
20 
21       case  WAIT_OBJECT_0:
22       default :
23          bLoop = FALSE;
24           break ;
25      }
26  };
27  CloseHandle(hThread);
28 
29 
30 





你可能感兴趣的:(Win32 中等待线程调用的结束)