Аннотация :
При реализации модели апартаментов (apartment model) программисты из Microsoft воспользовались своими «окнами». Вернее, не своими окнами, а их очередями сообщений. В оконных очередях сообщений реализован гибкий и производительный механизм обработки поступающих сообщений. Поддерживается как синхронная, так и асинхронная обработка. Rama Krishna предложил неординарный, но очень простой способ показать, как работает апартаментная модель в COM. Суть этого метода заключается в том, чтобы подглядывая за оконными очередями (создаваемыми и используемыми COM) воочию увидеть как работает COM.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Spy++ слишком устарел — он не показывает Message-Only Windows. Надо было воспользваться например Winspector Spy с www.codeproject.com — и тогда вся эта кухня с созданием окон для синхронизации STA была бы видна и на win2000/xp.
Здравствуйте, MaximE, Вы писали:
ME>Spy++ слишком устарел — он не показывает Message-Only Windows.
Насколько я знаю, новая версия (например, из VS.NET) показывает.
ME> Надо было воспользваться например Winspector Spy с www.codeproject.com — и тогда вся эта кухня с созданием окон для синхронизации STA была бы видна и на win2000/xp.
Давно это было. Да и возиться влом было. Хотя конечно надо было...
... << RSDN@Home 1.1 alpha 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Маленькое замечание. В статье автор приводит пример использования функции MsgWaitForMultipleObjects
//Если поток закончил свою работу...if(dwRet != WAIT_OBJECT_0 + 1)
break; //то выходим из цикла
Этот фрагмент не будет работать правильно. Если мы хотим отловить ситуацию, когда MsgWaitForMultipleObjects закончила свою работу именно потому, что поток, который мы ждем, завершился, то нужно проверять значения в диапазоне от WAIT_OBJECT_0 до WAIT_OBJECT_0 + <количество потоков, которые мы ждем> — 1. Поэтому в данном случае (для одного потока) пример нужно переписать так:
//Если поток закончил свою работу...if(dwRet != WAIT_OBJECT_0)
break; //то выходим из цикла