Re: Потоки в ДЛЛ, когда надо их прибивать?
От: KonstBez  
Дата: 21.03.03 14:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Среда MSVC++ c MFC

А>Вопрос такой, есть основное приложение, оно запускает дополнительные потоки (в терминах MSDN userinterface thread, потоки наследуются от CWinThread) соответственно в каждом потоке свое окно.
А>Если закрываем дочерние окна — все нормально.
А>Если закрываем основное окно, то доп потоки убиваются уже без моего участия (что сильно расстраивает) причем убиваются они как то жестко, потому что даже WM_QUIT они не получают.

А>Проблема решается, отслеживанием того, чего насоздавали и рассылкой в CWinApp::ExitInstance() всем потокам WM_QUIT.


А>Однако, если теперь функциональность, связанную с доп потоками, вынести в ДЛЛ, то отслеживать и убивать их из основного приложения, становится совсем не хорошо — т.е. просто такой вариант нельзя делать в силу ограничений накладываемых на задачу. Соответствено, потоки убиваются не правильно — я бы не сильно переживал на этот счет, не настолько я пунктуальный программист, но работа потоков подразумевает создание временного файла который надо убивать по завершению потока(на самом деле все несколько сложнее, однако, суть дела не меняется), и то что это не происходит сильно напрягает.


А>Попытка отлова всевозможных DLL_THREAD_DETACH,DLL_PROCESS_DEATTACH,... в DllMain успехом не увенчались(вполне вероятно, что я просто не то в них делал) , но

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

А>Вот здесь исходники тестового приложения(~8КБ) тока ногами не пинать, я на С++ с MFC пишу всего полгода


Вполне реальный выход — вставить в dll функцию (экспортируемую) типа CloseChildWindows с требованием клиенту вызывать ее перед завершением основного приложения. dll тоже модуль и имеет право на свой обработчик завершения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.