
windowsのスレッドについての質問です。
今、手元にある書籍のスレッドを作る節にCreateThread()関数を使ってスレッドを作るサンプルプログラムが載っています。
その中では CloseHandle()関数が一切呼ばれていません。
しかも、そのサンプルではいくつもスレッドを作り、そのスレッドはプログラム中でいくつも終了するようなものです。CloseHandle()は呼び出さなくても問題ないのでしょうか?
しかし、ネットで調べてみるとCloseHandle()を呼び出さなくてはいけないということが書かれていました。
http://www.daccho-it.com/program/WinApi/thread.htm
↑
参考にしたサイト
そこでいくつか質問です。
プロセスが終了するときにスレッドのハンドルは自動的に閉じられるという認識で大丈夫でしょうか?
CreateThread()、_beginthreadex関数はCloseHandle()を呼び出す必要があるで大丈夫でしょうか?
となると、CreateThread()の戻り値は必ず変数に保存しておく必要があるということですか?
書籍のサンプルではCreateThread()の戻り値はどこにも保存していませんでした、保存しない場合ハンドルが作られないってことはさすがにないですよね?
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
まず、プロセスが終了するときにはスレッドハンドルに限らずプロセスが所有する全てのハンドルが閉じられますので、それは大丈夫です。
次にハンドルは原則として閉じる必要があります。基本的にハンドルが必要なければ受け取ってすぐに閉じて良いです。ただ受け取らずに放置しても少しメモリが無駄になるだけですので、長時間動かして多数のスレッドを作るプログラム以外では放置しても実害は少ないです。
余談ですが、Excel VBAではハンドルを閉じるタイミングに注意が必要でした。Excel VBAでCreateThreadを使ったときはスレッド終了前にCloseHandleしたらExcelが応答しなくなりました。
# たぶんExcel内で同じハンドルを保持して使っているのだと思う
回答ありがとうございます。
参考になります。
プロセスが終了するときに全て閉じられるのならそれほど気にしなくても大丈夫なんですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows上で、シグナル(SIGTERM...
-
Linuxでスレッド優先度って変え...
-
マイクロソフトedge で5チャン...
-
VC++スレッドの正しい終了のさ...
-
スレッドの終了の仕方
-
WaitForSingleObjectの使い方に...
-
C# スレッド終了の監視について
-
_beginthreadexで生成したスレ...
-
マルチスレッドプログラム
-
特定のスレッドの破棄
-
メインスレッドのPostMessageと...
-
マルチスレッド?
-
Macターミナルで実行中のプログ...
-
powershell を使いカレントディ...
-
TCP/IP通信時のサーバーからの受信
-
プロセスIDの取得方法について
-
Excel(VBA)でSetTimer関数を使...
-
C# シリアル通信でデータ受信...
-
win10で、正確な待ち時間の作り方
-
VBSの処理中一旦処理を止めて再...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
Windows上で、シグナル(SIGTERM...
-
スレッドにて同一メモリの書き...
-
.netアプリへのSendMessageでフ...
-
メインスレッドのPostMessageと...
-
スレッドの監視方法について
-
C# スレッド終了の監視について
-
_beginthreadexで生成したスレ...
-
別スレッドのデータを受信できない
-
別スレッドからメインダイアロ...
-
スレッドの安全な終了のさせ方
-
マルチスレッドのスレッド数を...
-
VB2005 シリアル通信のClose処理
-
スレッドの終了の仕方
-
pthread_cond_wait 取りこぼし?
-
マルチスレッドプログラム
-
Linuxでスレッド優先度って変え...
-
別スレッドとイベントの終了手...
-
Win32APIでのスレッド処理
おすすめ情報