> 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&only=1Автор: shrek
Дата: 18.11.04
)
Posted via RSDN NNTP Server 1.9 delta