Похоже, что рабочий поток не имеет возможности правильно закрыться после закрытия приложения, поскольку процесс завершается до его завершения.Операционная система, как правило, довольно хорошо справляется с очисткой ресурсов, поэтому это может не быть проблемой.Однако, вероятно, лучше подождать, пока этот поток не выйдет, прежде чем позволить приложению завершить работу.Хотя это звучит так, что это приведет к 4-секундной задержке завершения работы вашего приложения.
Если это неприемлемо, вам придется добавить некоторый механизм в поток, чтобы получать событие завершения работы из основного потока приложений,Например, если вы замените рабочие потоки "sleep" на WaitForSingleObject события:
DWORD res = WaitForSingleObject(
shutdownEvent,
4000); // timeout
if(res == WAIT_OBJECT_0)
{
// received the shutdownEvent, exit
return 0;
}
// The delay has elapsed, continue with rest of thread.
. . .
Затем, когда вы завершаете работу в главном потоке, установите событие, затем дождитесь потокачтобы выйти, он должен выйти почти сразу:
SetEvent(this->shutdownEvent);
WaitForSingleObject(pThread->m_hThread, INFINITE); // pThread is returned from AfxBeginThread