スレッドAがWaitForSingleObjectを使用してスレッドBが終了するまで待機しているのではなく、別のスレッドBを作成しているスレッドAがあります。
問題は、スレッドBがスレッドの「thread_func」から戻っても、スレッドAが通知されないことです。。
thread_func(スレッドBのメイン関数)の最後にトレース(OutputDebugString)を追加し、スレッドBが実行を終了したことがわかりますが、スレッドAがWaitForSingleObjectから出ることはありません。
ここで、このコードがCOMオブジェクトにあることも追加する必要があります。また、上記のシナリオは、zippy32.exeを呼び出しているときに発生しているため(スタックします!)、スレッドAはDLLMainから来ていると思います。
スレッドAが通知されない理由はありますか?!?!