
スレッドを、同じハンドルを利用して作る場合、
途中でハンドルの開放が必要か教えてください。
void thread1();
HANDLE handle;
//スレッド作成
handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread1, NULL, 0, &dwID);
//作ったスレッドの終了を待つ
WaitForMultipleObjects(1, handle, TRUE, INFINITE);
//スレッドを作った時のハンドルを閉じる。これ必要?
CloseHandle(handle);
//同じハンドルを利用して別のスレッドであるthread2を作成
handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread2, NULL, 0, &dwID);
この、CloseHandle(handle);は必要ですか?
No.2ベストアンサー
- 回答日時:
ハンドルは、Windowsがリソースを管理するために付ける数値です。
質問中で、
HANDLE handle;
として、ハンドル型の変数を定義していますが、この「handle」自体はハンドルではなく、CreateThread()からの戻り値がハンドルです。
一度、
handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread1, NULL, 0, &dwID);
を実行した後、
handle = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread2, NULL, 0, &dwID);
としても、同じハンドル変数を使用していますが、同じハンドルを使用しているわけではありません。
1度目のCreateThread()も、2回目のCreateThread()も新たにWindowsから取得したハンドルを返すからです。
ハンドルは、使用後、閉じる必要がありますので、
CloseHandle(handle);
は必要です。
ありがとうございます。
「handle」自体はハンドルではないんですね。
CreateThread()が返した値によって、handdleに1234が
代入されたとしたら、そのスレッド関係のものを
全て開放するには、スレッドが終了して、1234という
値が格納されたHANDLE型の変数をCloseHandle()の引数に入れて、
1234という数字で登録されているハンドルを開放する必要が
あったんですね。
No.3
- 回答日時:
CreateThread で作成したスレッドのハンドルだから、ExitThread すれば、ハンドルはクローズされ、handle の値が無効になるような気にもなりますが、
WaitForMultipleObjects を呼び出している事からもわかるように、スレッドが終了してもハンドルそのものは必用になる事があるので、ハンドルが自動的にクローズされる事はありません。
よって、CloseHandle(handle); は必要です。
ちなみに、WaitForMultipleObjects の2つ目の引数は、HANDLE へのポインタです。
質問文で、
void thread1();
の下に書くつもりの
void thread2();
が抜けていました。
それから、WaitForMultipleObjects の2つ目の引数を
間違えていました。HANDLE配列へのポインタなんですね。
つまり、
HANDLE handle;
は
HANDLE handle[1];
と書くべきで、それ以降も書き直しました。
ありがとうございます。
どうして、閉じなくてもいいかもしれないと思ったかというと
handleというのを1つの形のある物のようなものだと思っていました。
CloseHandle(handle);して、またすぐにhandleが使われるなら
CloseHandle(handle);の意味がないかもしれないと思っていました。
No.1
- 回答日時:
結論から言うと必要ですが、
そのプログラムだと、単に変数の使い回しをしているだけで、
同じハンドルなどそもそも使ってなどいないのですが?
void *p;
p = malloc(...);//一回目
p = malloc(...);//二回目
で二回目のmallocは同じポインタを利用するのでfreeは要らないなんて思ってませんよね?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- 英語 The incidence of this complication is quite low, m 1 2023/06/04 13:14
- PHP isset — 変数が宣言されていること、そして null とは異なることを検査 1 2022/03/27 17:34
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- 英語 The vital bone formation in the two large repairs 3 2023/03/25 09:44
このQ&Aを見た人はこんなQ&Aも見ています
-
WaitForSingleObjectの使い方について
C言語・C++・C#
-
文字列がNULLか空文字列かの判定
C言語・C++・C#
-
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
-
4
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
5
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
6
CStringの中から数字だけの場合と、その他が含まれる場合を識別する方法
C言語・C++・C#
-
7
(マルチスレッド)_beginthreadexに複数の引数を渡す
C言語・C++・C#
-
8
CStringをwchar_tに変換したい
C言語・C++・C#
-
9
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
10
エディットボックスの入力制限について
C言語・C++・C#
-
11
スレッドの安全な終了のさせ方
C言語・C++・C#
-
12
CString から LPCTSTRの型に変換
C言語・C++・C#
-
13
Visual Studio 「AnyCpu」について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
点滅で知らせる方法
-
キーボード入力をHSPでさせたい...
-
msgboxの表示位置
-
VBでRegisterWindowMessage関数...
-
他のウィンドウのボタンを自動...
-
CloseHandle()
-
SetWindowsHookEx(グローバル...
-
アプリケーション間での操作
-
マウスの右クリック+Shiftキー...
-
SetWindowText関数について
-
チェックボックスのキーダウン...
-
システム例外のメッセージを変...
-
デスクトップ上のアイコンの位...
-
VBAでコントロールのハンドルを...
-
vbaから他のアプリを終了
-
Excel VBA で外部アプリケーシ...
-
WM_NCLBUTTONUPについて
-
メッセージボックスの選択ボタ...
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
vbaから他のアプリを終了
-
他のウィンドウのボタンを自動...
-
メッセージボックスの選択ボタ...
-
msgboxの表示位置
-
SendMessage で ESC など
-
VBAでコントロールのハンドルを...
-
SetWindowText関数について
-
VBA 複数セルが空白なら印刷さ...
-
点滅で知らせる方法
-
チェックボックスのキーダウン...
-
デスクトップ上のアイコンの位...
-
CloseHandle()
-
メッセージループについて
-
メッセージハンドラ
-
VB.netでSendMessageを使用して...
-
システム例外のメッセージを変...
-
Excel VBA で外部アプリケーシ...
-
マウスの右クリック+Shiftキー...
-
キーボード・フックのアプリを...
-
windowsメールスロットについて...
おすすめ情報