Make Oneself More Strong

mcs51a( 高兴就写点:-),不高兴就不写 )

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, 00, 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 





posted on 2011-02-16 14:00 mcs51a 阅读(2116) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理