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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VC++スレッドの正しい終了のさ...
-
DirectX 11のConsntanBuffer
-
マルチスレッドについて
-
スレッドの終了はどうやるんで...
-
スレッドの終了の仕方
-
msec単位のWait Timerが作れない!
-
メインダイアログが最背面に表...
-
DirectX LPDIRECT3DDEVICE9のマ...
-
スレッドの安全な終了のさせ方
-
Win32APIでのスレッド処理
-
Windows上で、シグナル(SIGTERM...
-
MFCマルチスレッドについて
-
excelvbaでCreateThreadの動作
-
VB2005 シリアル通信のClose処理
-
CWnd::OnTimerのスレッドの取得
-
スレッドの監視方法について
-
pthread_cond_wait 取りこぼし?
-
Macターミナルで実行中のプログ...
-
これて逆じゃないですか?
-
緯度、経度の 10進法と 60進法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WaitForSingleObjectの使い方に...
-
VC++スレッドの正しい終了のさ...
-
スレッドの監視方法について
-
スレッドの安全な終了のさせ方
-
Windows上で、シグナル(SIGTERM...
-
マルチスレッドプログラミング...
-
スレッドの終了の仕方
-
スレッドにて同一メモリの書き...
-
VB2005 シリアル通信のClose処理
-
スレッドの終了はどうやるんで...
-
スレッドでWM_TIMERを受け取れない
-
同一スレッドで、ロックをかけ...
-
マルチスレッドのスレッド数を...
-
WaitForMultipleObjectのイベン...
-
MFC通信プログラムマルチスレッ...
-
pthread_cond_wait 取りこぼし?
-
【VC++6.0(MFC)】スレッドの呼...
-
待機関数(WaitForMultipleObjec...
-
LinuxでDoEvents()同等機能
-
CWnd::OnTimerのスレッドの取得
おすすめ情報