Показать сообщение отдельно
Старый 23.07.2004, 12:26   #9  
Alks is offline
Alks
Участник
 
336 / 41 (2) +++
Регистрация: 23.07.2004
Адрес: г. Новокузнецк
Упс... похоже я поторопился... Хотя и приложение перестало рушится в случае если событие вызывается когда аксапта крутится в цикле GetMessage/DispatchMessage и даже регулярно обновляется окно infolog, если в обработке события писать info( "...." ), но если событие случается в момент обновления таблиц или другой какой нибудь активности, всё подвисает странным образом...

В общем любой кто когда нибудь создавал проекты ActiveX-control-ов (да и вообще COM-объектов) в средах программирования (VC++ / C++Buidler / Delphi) с первых же шагов стандарных Wizard-ов имеет возможность выбрать так называемую Threading model (можно перевести как "модель управления многопоточностью") - по умолчанию данная опция обычно стоит в Apartment режиме из 4 возможных: Single, Apartment, Free, Both. Обычно с многопоточностью программисты разбираются сами и игнорируют этот параметр (многие даже не знают что это такое).

Инфраструктура COM-объектов обеспечивает то, что для объектов с моделью многопоточности SINGLE, вызов их методов (invocation) произойдет в основном потоке программы, даже если они были вызваны из другого потока, ЧТО МНЕ И ТРЕБОВАЛОСЬ. Насколько я понимаю Windows просто складывает вызовы методов таких объектов с главную очередь сообщений программы и по в ProcessMessage вызывает их. По идее это должно было сработать, но сработало как то наполовину... сейчас еще покопаю в этом направлени...