如果在.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