在 XP 上运行。我有一个调用 calls 的客户端CoInitializeEx(NULL, COINIT_MULTITHREADED),加载一个(本地)DCOM 对象,并附加一个事件接口,以便 DCOM 对象可以发回事件。客户端看起来很像记事本,带有一个覆盖客户端区域以显示事件消息的多行文本框。以下是创建锁定的调用:
- 客户端调用
p->DoStuff()DCOM 对象。 - DCOM 对象
c->DoStuffEvent()在处理时调用客户端DoStuff()。 - 客户端向子文本框发送一条
EM_REPLACESEL消息,让它显示“事情正在发生”
客户端冻结在SendMessage(EM_REPLACESEL). 客户端的调用p->DoStuff()在主线程上SendMessage(EM_REPLACESEL)完成,而在不同的线程上完成。我确定这与问题有关。
有人可以解释导致锁定的原因以及我如何解决它吗?客户端和 DCOM 对象由我在 MSVC/ATL 中编码,因此我可以根据需要修改它们。