Re[5]: Потоки в ДЛЛ, когда надо их прибивать?
От: Frostbitten Россия  
Дата: 21.03.03 20:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Просто надеялся, что ошибюсь и можно как то измудриться и реализовать все внутри ДЛЛ, наверное, не выйдет


Нет, ну измудриться как раз таки можно — покрупному.

Поставить во всех dll'ках WH_GETMESSAGE хук (::SetWindowsHookEx) для основнового треда (из dll'ки можно поставить и общесистемный, но так, конечно, лучше не поступать). И в обработчике отлавливать WM_QUIT, запощщеный в главный тред. Хук будет вызван в контексте главного треда — в каждом из них ждите завершения соответствующего (этому хуку) треда.

А если продолжить измудряться, то можно поиметь и один хук на всех — диспетчер, который будет корректно ожидать завершения всех зарегистрированых у него тредов.

Но скажу мое мнение — измудрение это полнейшее. В случает множества хуков, может упасть производительность главного треда (ведь тысячи глаз будут следить за _каждым_ посылаемым ему сообщением), во втором это жестокое усложнение архитектуры dll'лок.

P.S.
Когда уже дописывал, вспомнил, что тут топик проплывал флеймовый о возможной засаде при обработке именно WM_QUIT (ведь его постят через PostQuitMessage, а не как все остальные через PostMessage), что-то там со внутренними флагами, которые устанавливает PostQuitMessage, но по-моему это не относиться к этому делу, но вам стоит с ним ознакомиться (в гораздо большей степени, чем это сделал я(:. Топик SendMessage vs. PostMessage
Автор: DrMom
Дата: 21.02.03
, в особенности пост тов. Valerio, оцененный в 13 балов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.