■
最近仕事で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で終了待ちをするプログラムを見てしまった為、
そっちを書いてしまいやすいという問題。