最近仕事でThread制御のプログラムを書いたわけだが、
今回も忘れてて_beginthreadを使ってしまい、
_beginthreadexに書き直していたので、忘れない為のメモ代わり。

int main(void)
{
    HANDLE hThreadHandle;
    unsigned dmmy;

    // スレッド起動
    hThreadHandle = (HANDLE)_beginthreadex(NULL, 0, 
                                          (LPVOID)FnctionThread, 
                                           NULL, 0, &dmmy)

    // スレッド終了待ち
    WaitForSingleObject( hThreadHandle, INFINITE );    

    // ハンドル開放
    CloseHandle( hThreadHandle );
}

何故この方法に書き直すかというと、
スレッド終了待ちをWaitForSingleObjectを書くだけでよいので、
フラグを確認したりする必要が無いから。
特に複数のスレッドを同時に制御してる場合はこの方が良いはず。
ちなみにハンドル開放を忘れるとハンドルリークする。
後で調べた事だが、_beginthreadでもHANDLE型にキャストする事で、WaitForSingleObjectが使える。この場合はCloseHandleが不要。
まぁ最初にSleepとWhileで終了待ちをするプログラムを見てしまった為、
そっちを書いてしまいやすいという問題。