_beginthreadと_beginthreadexの違い

前から気になっていたのだが、_beginthreadの戻り値をWaitForSingleObjectで待とうとすると失敗する。
_beginthreadと_beginthreadexの戻り値は、両方とも「スレッドを指すハンドルを返す」となっていて、HANDLE型にキャストして使うことができる。
MSDNの説明は「_beginthreadでは終了時にハンドルが自動的に閉じる」となっていて、これの意味をようやく理解したのだが、WaitForSingleObjectを発行した時点でスレッドが終了していると、ハンドルが無効なためWaitForSingleObjectが失敗することになる。
なので、任意の時点でWaitForSingleObjectを使うためにはDuplicateHandleで複製しておく必要があるのだが、そういう用途だったら最初から_beginthreadexを使うべきなのだろうな。