在XP上运行。我有一个客户端调用调用CoInitializeEx(NULL, COINIT_MULTITHREADED)
,加载(本地)DCOM对象,并附加一个事件接口,以便DCOM对象可以发回事件。客户端看起来很像记事本,其中多行文本框覆盖客户区以显示事件消息。以下是创建锁定的呼叫:为什么我的DCOM客户端锁定对SendMessage的调用?
- 客户端在DCOM对象上调用
p->DoStuff()
。 - 在处理
DoStuff()
时,DCOM对象在客户端上调用c->DoStuffEvent()
。 - 客户端发送一个
EM_REPLACESEL
消息,孩子的文本框,以使其显示“的东西正在发生的事情”
客户端的瞬间将SendMessage(EM_REPLACESEL)
。客户对p->DoStuff()
的调用在主线程上完成,而SendMessage(EM_REPLACESEL)
在不同线程上完成。我相信这与问题有关。
有人可以解释是什么导致了锁,以及我可以如何解决它?客户端和DCOM对象由我在MSVC/ATL中编码,所以我可以根据需要对它们进行修改。
是的,这现在非常有意义。谢谢。 – Charles 2010-02-23 18:23:50