在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