
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で質問しましょう!
似たような質問が見つかりました
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- Excel(エクセル) エクセル終了が遅くなった 7 2022/04/19 12:11
- CPU・メモリ・マザーボード インテルCPUの世代ごとのデスクトップとノートのコア数についてこれで正しいですか?(*´ω`*) 1 2023/01/07 14:44
- ノートパソコン Windows11搭載パソコン 新規購入にあたって 4 2022/11/09 18:11
- 政治 Yahoo知恵袋について質問です。あそこの政治経済のスレッドですが、ここはいったいあそこは何なのです 4 2022/06/18 22:10
- PHP isset — 変数が宣言されていること、そして null とは異なることを検査 1 2022/03/27 17:34
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
マルチスレッド内のループについて
-
VC++スレッドの正しい終了のさ...
-
同一スレッドで、ロックをかけ...
-
Windows上で、シグナル(SIGTERM...
-
スレッドにて同一メモリの書き...
-
別スレッドからのフォームのテ...
-
sleep関数とは?
-
C# スレッド終了の監視について
-
C#でスレッド実行中のイベント...
-
VB2005 シリアル通信のClose処理
-
スレッドの監視方法について
-
マルチスレッドのスレッド数を...
-
DirectX 11のConsntanBuffer
-
複数スレッドを動作させるのに...
-
マルチスレッドでブレイクポイ...
-
スレッドの安全な終了のさせ方
-
スレッドでWM_TIMERを受け取れない
-
.netアプリへのSendMessageでフ...
-
メインダイアログが最背面に表...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スレッドの監視方法について
-
VC++スレッドの正しい終了のさ...
-
スレッドにて同一メモリの書き...
-
スレッドの終了の仕方
-
VB2005 シリアル通信のClose処理
-
WaitForSingleObjectの使い方に...
-
別スレッドのデータを受信できない
-
同一スレッドで、ロックをかけ...
-
CWnd::OnTimerのスレッドの取得
-
スレッドの安全な終了のさせ方
-
メインダイアログが最背面に表...
-
スレッド一覧の取得
-
Windows上で、シグナル(SIGTERM...
-
C言語で一定時間待機後、再実行
-
C#でスレッド実行中のイベント...
-
複数スレッドを動作させるのに...
-
.netアプリへのSendMessageでフ...
-
DirectX LPDIRECT3DDEVICE9のマ...
-
スレッド内でコントロールやWin...
-
DirectX 11のConsntanBuffer
おすすめ情報