XPで実行しています。呼び出しを呼び出し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でコーディングしているので、必要に応じて両方を変更できます。