Потоки в BHO/ATL/COM. Винапи или что-то другое?

Я пишу надстройку для IE и использую для этого ATL. Мне нужно создать фоновый рабочий поток, чтобы поток пользовательского интерфейса был разблокирован как можно скорее. Мой вопрос в том, должен ли я использовать самый простой способ создания потока, который является Winapi, Создать тему и т. д.

Или есть другой предлагаемый способ создания рабочего потока в проектах BHO/ATL/COM?

Я должен сначала изучить этот материал, поэтому я подумал, что сначала спрошу;)


person Mariusz Pawelski    schedule 26.11.2010    source источник


Ответы (3)


Нет необходимости использовать низкоуровневые API, если вам не нужен уровень контроля, который они предлагают.

С ATL у вас уже есть CWorkerThread, но вы также можете использовать другие библиотеки, такие как Boost.Thread Если вы предпочитаете.

person Georg Fritzsche    schedule 26.11.2010
comment
Спасибо. Думаю, это то, что я ищу. Я не хочу добавлять лишнюю библиотеку для этой простой задачи, если у меня уже что-то есть. Я пытался использовать этот CWorkerThread, но до сих пор не знаю, как это сделать. Можете ли вы посмотреть на мой другой вопрос здесь: stackoverflow.com/questions/4294629? - person Mariusz Pawelski; 28.11.2010

Если вы полностью переходите к API, то _beginthreadex предпочтительнее CreateThread(), если ваш поток будет использовать CRT. (Если вы не знаете, то, вероятно, будет)

person John Dibling    schedule 26.11.2010
comment
Эта проблема давно исправлена, CreateThread будет работать нормально. _getptd() в исходном коде crt. - person Hans Passant; 26.11.2010

Как правило, вы должны использовать boost::thread, Visual Studio ConCRT или Intel TBB, в зависимости от того, насколько экстремальны ваши потребности в многопоточности. Для простейшего использования выберите boost::thread. Для более продвинутого использования выберите ConCRT или TBB. Не используйте WinAPI, если вы серьезно не нуждаетесь в какой-либо функции, не предлагаемой в других библиотеках. Простой факт заключается в том, что если вы пишете библиотеку на C++, то использование WinAPI для потоков похоже на возвращение к ассемблеру для написания вашей программы. Оставайтесь на C++ — используйте Boost.

person Puppy    schedule 26.11.2010
comment
Не согласен с ненавистью к API. Я использую API все время. Скромно, просто, легко. - person John Dibling; 26.11.2010
comment
@John: просто и легко - это два слова, которые я никогда раньше не слышал для описания Win32 API. Мы говорим об одном и том же здесь? Я имею в виду, что иногда он недостаточно документирован, чрезвычайно противоречив и полон странных ловушек, предостережений и краеугольных случаев. - person jalf; 26.11.2010
comment
@John Dibling: В API нет ничего плохого - только WinAPI. Он устарел и предназначен для C. Нет причин использовать его вместо значительно превосходящего boost::thread. - person Puppy; 26.11.2010
comment
Я думаю, что немного бессмысленно вводить высокоуровневую кроссплатформенную библиотеку, такую ​​​​как boost, с единственной целью управления одним фоновым рабочим потоком, особенно когда ваша кодовая база обязательно зависит от платформы. - person Luke; 26.11.2010