> 2) Законно ли в COM объектах использовать стандартные функции WIN API для создания и управления потоками (такие как CreateThread, TerminateThread и пр.)?

Законно. Надо только не забыть вызвать CoInitialize[Ex] в потоке. Так же лучше пользоваться __beginthreadex, для инициализации С++ рантайма.

> А если я пишу напрмер вот такой код, нужно ли производит вышеобозначенный вызов?


void thread_func(void *arg)
{
   CMyATLCtrl *owner = reinterpret_cast<CMyATLCtrl*>(arg);
   //...
   owner_->Fire_OnMouseDown(x, y);
   //...
}

//...
void CMyATLCtrl::StartThread()
{
   thread_hndl_ = CreateThread(..., &thread_func, this, ...); //не помню сигнатуры...
}

Нужен. И не только инициализация COM-а. Ещё нужна замена стандартной реализации Connection Point-ов на ту (IConnectionPointImplMT), которая поддерживает многопоточность. См. http://support.microsoft.com/kb/q280512/ (см. также http://rsdn.ru/Forum/Message.aspx?mid=905310&amp;only=1
Автор: shrek
Дата: 18.11.04
)
Posted via RSDN NNTP Server 1.9 delta
Автор: Tom    Оценить