работает на 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, поэтому я могу изменить их оба при необходимости.