スレッド実行中にCloseHandleしてよいのか?
C/C++言語にて_beginthreadexを使ってスレッドを作成したとき、戻り値としてスレッドのハンドルを取得できます。
通常はスレッドが終了したのを確認した後、CloseHandleして後処理をします。
ではスレッド実行中にCloseHandleしてやるとどうなるでしょうか。
スレッドは行方不明となり、メモリリークを起こすでしょうか?
それとも、スレッドが強制終了してしまうのでしょうか?
MSDNによると、「スレッドのハンドルを閉じても、それに関連するスレッドは終了しません。スレッドオブジェクトを削除するには、最初にスレッドを終了し、次にそのスレッドのすべてのハンドルを閉じなければなりません。」とあります。
従ってスレッドが強制終了してしまうことはありません。
では、メモリリークを起こすのでしょうか。
どこかのサンプルを引っ張ってきて、メインスレッドとサブスレッドの長さを変えてみて、メインスレッドが先に終わるようにしてみればいいと思います。
多分メインスレッドが終了すると同時に、サブスレッドも終わりますよね?
つまり、プロセス終了時にシステムがスレッドを停止してくれます。
従ってメモリリークも起こりません。
…ということは結局、何も起こりません。
CloseHandleするということは、Handleを失うことになるので、スレッドにアクセス出来なくなりますが、問題は起こらないようです。