STA线程同步最好的是什么?
我有一个基于对话框的MFC应用程序,有两个STA线程:主要和第二个。我在主UI线程中创建了COM对象。
我从第二个线程调用COM接口。在主线程中,为了确保第二个线程在主线程进行之前完成,我使用一个循环来等待线程。这个循环循环调用MsgWaitForMultipleObjectsEx(timout = 500)。
我立刻陷入了等待的僵局。然后我意识到MFC消息泵AfxInternalPumpMessage()只能帮助阻止调用,但对死锁情况根本没有帮助。
然后我将Peek / Translate / DispatchMessage代码添加到等待循环中,然后全部工作。
现在,似乎没有手动编码Peek / Translate / DispatchMessage循环,你根本不能进行STA线程同步?任何等待电话都会使你陷入僵局。那么同步STA线程的最佳或标准方法是什么?
谢谢!
答案 0 :(得分:2)
也许您正在寻找CoWaitForMultipleHandles
?
如果调用者驻留在单线程中 公寓,CoWaitForMultipleHandles进入COM模态循环,并进入线程 消息循环将继续发送 消息使用线程的消息 过滤。如果没有注册消息过滤器 对于线程,默认COM 使用消息处理。
答案 1 :(得分:0)
没有任何等待,但任何停止运行消息循环的等待都会让你陷入僵局。解决方案是交错等待循环和消息循环处理 - 稍等一下,然后处理所有待处理的消息,重复。