1

什么是最好的做 STA 线程同步?

我有一个基于对话框的 MFC 应用程序,它有两个 STA 线程:主线程和第二线程。我在主 UI 线程中创建了 COM 对象。

我从第二个线程调用 COM 接口。在主线程中,为了确保第二个线程在主线程继续之前完成,我使用循环来等待线程。此循环循环调用 MsgWaitForMultipleObjectsEx(timout=500)。

我立即陷入了等待的僵局。然后我意识到 MFC 消息泵 AfxInternalPumpMessage() 仅有助于阻塞调用,但对死锁情况毫无帮助。

然后我将 Peek/Translate/DispatchMessage 代码添加到等待循环中,然后一切正常。

现在,似乎没有手动编码 Peek/Translate/DispatchMessage 循环,您根本无法进行 STA 线程同步?任何等待电话都会使您陷入僵局。那么同步 STA 线程的最佳或标准方法是什么?

谢谢!

4

2 回答 2

2

也许您正在寻找CoWaitForMultipleHandles

如果调用者驻留在单线程单元中,则 CoWaitForMultipleHandles 进入 COM 模式循环,线程的消息循环将继续使用线程的消息过滤器发送消息。如果没有为线程注册消息过滤器,则使用默认的 COM 消息处理。

于 2011-06-27T06:46:54.763 回答
0

不是任何等待,但任何停止运行消息循环的等待确实会使您陷入僵局。解决方案是交错等待循环和消息循环处理 - 稍等片刻,然后处理所有待处理的消息,重复。

于 2011-06-27T06:29:17.030 回答