У меня есть диалоговое окно с моделями, которое создает поток, и если нажата кнопка отмены в диалоговом окне, устанавливается переменная bCancel, которая периодически проверяет этот поток, а затем сразу же переходит к ее очистить код. Он работает нормально. Я даже могу отправить WM_COMMAND ... ID_CANCEL в диалог из других мест, и он работает одинаково. Но он не работает, когда я пытаюсь отправить ID_CANCEL в диалог из обработчика WM_CLOSE главного окна приложения (т. Е. Пользователь пытается закрыть все приложение вниз, пока этот поток запущен.) Насколько я могу сказать, что-то просто заканчивает поток извне, прежде чем он сможет выполнить свой код очистки. Правильно ли это звучит. Что я могу сделать.завершение нитки изящно при завершении основного приложения
(В обработчике ID_CANCEL диалога есть критический раздел, который я не упоминал, - не уверен, насколько он уместен. (BCancel установлен в этом критическом разделе, а поток выполняет очищающий код в пределах того же критического раздела.)
Обновите свой вопрос и объясните, как вы * знаете *, что очищающий код не выполняется. –
Ну, я ввел в него отладочные утверждения. В частности, хотя каталог не удалялся, который удаляется в конце потока и удаляется в каждом другом экземпляре, который ID_CANCEL отправляется в диалог. Я пробовал WaitForSingleObject в обработчике диалога ID_CANCEL (как было предложено Крисом ниже), и нить не заканчивается, если я так жду, потому что сам поток устанавливает управляющие значения диалогового окна в своем коде завершения. Возможно, мне нужно запустить WaitForSingleObject в обработчике WM_CLOSE главного окна приложения (а не в диалоговом коде). – Mark