• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:win32 スレッドのハンドルついて)

win32 スレッドのハンドルについて

このQ&Aのポイント
  • win32のスレッドについての質問です。CreateThread()関数を使ってスレッドを作る際、CloseHandle()関数は必要なのかどうか疑問です。
  • プロセスが終了するときにスレッドのハンドルは自動的に閉じられるのか、CreateThread()や_beginthreadex関数を使う際にCloseHandle()を呼び出す必要があるのか、書籍のサンプルではCreateThread()の戻り値が保存されていないため不安です。
  • 質問サイトで調べたところCloseHandle()を呼び出す必要があると書かれていましたが、実際にはどうなのか教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

まず、プロセスが終了するときにはスレッドハンドルに限らずプロセスが所有する全てのハンドルが閉じられますので、それは大丈夫です。 次にハンドルは原則として閉じる必要があります。基本的にハンドルが必要なければ受け取ってすぐに閉じて良いです。ただ受け取らずに放置しても少しメモリが無駄になるだけですので、長時間動かして多数のスレッドを作るプログラム以外では放置しても実害は少ないです。 余談ですが、Excel VBAではハンドルを閉じるタイミングに注意が必要でした。Excel VBAでCreateThreadを使ったときはスレッド終了前にCloseHandleしたらExcelが応答しなくなりました。 # たぶんExcel内で同じハンドルを保持して使っているのだと思う

yozakura20
質問者

お礼

回答ありがとうございます。 参考になります。 プロセスが終了するときに全て閉じられるのならそれほど気にしなくても大丈夫なんですね。

関連するQ&A

専門家に質問してみよう