我打电话给AfxBeginThread并使用CWinThread在我的MFC应用程序中创建一个UI线程。我注意到如果我的主线程在CWinThread :: InitInstance()函数返回之前试图将PostThreadMessage()传递给我的新线程,那么PostThreadMessage()将返回错误:无效的线程句柄。等待AfxBeginThread/CWinThread消息泵处于活动状态?
我的猜测是,直到InitInstance返回后,新线程上的消息泵才会设置。我见过的关于AfxBeginThread的示例代码和我读过的文档没有很好地解释这种行为,或者显示了一个模式来等待线程被初始化。
在InitInstance返回并且线程的消息泵准备好接收消息之前阻塞我的主线程的最好方法是什么?
你说得对,我的回答太复杂了。在回答之前,我应该多研究一下CWinThread类。关键点是在发信号通知事件之前在新线程上调用PeekMessage()。 InitInstance,OnIdle和Run都是可行的。 –