Ответственность за очистку объекта CWinThread зависит от его значения m_bAutoDelete. По умолчанию это удалить себя. Для огня и забыть короткие бегущие нити это хорошо. Он будет убирать за собой.
Если ваш поток долго работает и ему нужно сообщить, что пора выходить из него или иным образом взаимодействовать с ним, вы захотите, чтобы дескриптор CWinThread оставался действительным и не указывал на самоудаляемый объект.
Если для m_bAutoDelete установлено значение FALSE, вы берете на себя ответственность за его удаление. Чтобы обеспечить безопасность возвращаемого указателя, вы должны создать приостановку и установить для нее значение ЛОЖЬ, прежде чем возобновить работу, как это было предложено Джозефом Ньюкомером в его статье Использование рабочих потоков .
thread = AfxBeginThread(proc, this,
THREAD_PRIORITY_NORMAL, // default: use it
0, // default stack size
CREATE_SUSPENDED); // let us set auto delete
if(thread) { // protect against that rare NULL return
thread->m_bAutoDelete = FALSE;
thread->ResumeThread();
}