僕は、使ってません。その理由を、「Win32マルチスレッドプログラミング」から、抜粋して、ご紹介いたします。
第1に、_beginthread関数ではCreateThread関数のパラメータの一部が省略されている。このため、スレッドをサスペンド状態で作成し、優先順位の調節やデータの初期化作業を行うことはできない。
DirectXプログラマにとって重要なのは、「優先順位の調節」、つまり、プライオリティーの設定ができないというのは、痛いですねえ。さらに、
第2の最も重要な問題は、_beginthread関数によって作成されたスレッドが、最初にスレッドへのハンドルをクローズすることである。
ということは、
このため、_beginthread関数が返った時点ではハンドルが無効になっている可能性があり、_beginthread関数が返したハンドルを使おうと試みると競合条件の発生が避けられない。しかし、このハンドルが無ければ、スレッドを待ったり、そのパラメータを変更したり、終了コードを得ることすら不可能です。
ハンドルや、IDが得られないのは、痛いです。スレッドを待てなければ、連携もくそもないですからね。ALT+TABでの最小化時などは、スレッドを、すべてサスペンドしておくのは、当然でしょう。それができないというのは...。どうして、こんな仕様なのでしょうか。
これは、Win32のインプリメント上の細部を隠蔽するための処置だった。
とてもわかりやすい理由でした。というわけで、_beginthreadexを使いましょう。そうそう、_beginthreadexは、「CreateThreadは使用不可!?」にも、注意などを書いておきました。そちらもあわせてご覧ください。