Потоки в ДЛЛ, когда надо их прибивать?
От: Аноним  
Дата: 21.03.03 13:54
Оценка:
Среда 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 пишу всего полгода


21.03.03 17:52: Перенесено из 'C/C++'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.