如果不是在主线程中执行waitfor的话,很简单,只要调用waitforsingleobject等待此线程的handle为signaled状态即可。
如果是在主线程中执行waitfor则比较麻烦。首先要在handle数组中增加一个syncevent,然后循环等待,直到线程结束(即msgwaitformultipleobjects返回wait_object_0,详见msdn中关于此api的说明)。
在循环等待中作如下处理:如果有消息发生,则通过peekmessage取出此消息(但并不把它从消息循环中移除),然后调用msgwaitformultipleobjects来等待线程handle或syncevent出现signaled状态,同时监听消息(qs_sendmessage参数,详见msdn中关于此api的说明)。可以把此api当作一个可以同时等待多个handle的waitforsingleobject。如果是syncevent被setevent(返回wait_object_0 + 1),则调用checksynchronize处理同步方法。