Для того, чтобы можно было безопасно ожидать дескриптор потока, необходимо:
- Начало потока приостановлено
- Установите для элемента m_bAutoDelete значение false, чтобы возвращаемый CWinThread * не удалялся автоматически после выхода из потока
- Возобновить поток
- И, наконец, подожди на ручке, как ты.
Кроме того, вы можете запустить приостановленный поток, затем продублировать дескриптор, оставить m_bAutoDelete как есть и, наконец, дождаться нового дескриптора. Таким образом, CWinThread * действительно будет удален, но у вас все равно останется ручка для ожидания. Кроме того, не забудьте закрыть ручку, как только вы закончите ждать на ней.
Если вы оставите свой код как есть, вы можете даже не ждать при закрытом дескрипторе. Если поток завершается, вы попадаете в функцию ожидания, указатель CWinThread * может указывать на удаленный объект, и вы получите исключение.