А помоему корректное завершение дочернего потока должно осуществляться самим дочерним процессом. Не?
А то что вы делаете - это сдирание шкуры с живого процесса.
Процессу посылается последовательность сообщений, соответствующая именно корректному завершению. А кто посылает сообщения ОС (например, когда вы делаете Alt+F4) или другой процесс - фиолетово.
Резюмирую:
WM_CLOSE + WM_QUIT - корректно.
WM_CLOSE без WM_QUIT - содранная шкура с живого процесса (окон нет, а цикл сообщений крутится).
WinAPI::TerminateProcess - выстрел в голову (крайняя мера, отстрел зависших процессов).