2

Win32スレッドがある場合は、ハンドルを介して参照し、スレッドIDを取得することもできます。

スレッドが終了した場合でも、ハンドルを閉じるまでハンドルは有効で使用可能です。(それ以外の場合は、GetExitCodeThreadなどを使用できませんでした

ただし、スレッドが終了した後、スレッドIDに何が「発生する」かについては、ドキュメントで一貫して言及されていないようですが、終了したスレッドへのスレッドハンドルを保持している人がいる限りです。

スレッドハンドルと識別子は次のように述べています

識別子は、スレッドが作成されてからスレッドが終了するまで有効です。

次にGetThreadIdAPIを見ると、スレッドが終了するまでIDが有効である場合にのみ、終了したスレッドに対して何が返されるのか疑問に思うことがあります。(また、このサイトにはユーザーのコメントがあります:「正しくありません。スレッドへのオープンハンドルがある限り、スレッドIDはまだ有効で一意です。」これは、この質問に「はい」で答えますが、それ以上はありません。コンテキスト私は警戒しています。)

また、私はこのスニペットをSOの回答で見つけました:

IDは、システムで実行されているスレッドの一意の数値識別子です。スレッドハンドルは、他のカーネルオブジェクトハンドルと同様に、カーネルオブジェクトへの特殊なタイプの参照カウントポインタと見なすことができます。

それが正しく、スレッドIDが実際にカーネルオブジェクトのIDである場合、ハンドルが開いている限り、このIDが有効である必要があるようです(カーネルオブジェクトはクエリを実行するためにそこにとどまる必要があるため)。

私の推論は正しいですか?ハンドルが開いている限り、スレッドIDは有効ですか?どちらか一方を明示的に述べているMSドキュメントまたは権威ある本はありますか?

4

1 に答える 1

6

ご了承ください:

したがって、識別子は最後のスレッドハンドルが閉じられた後にのみ再利用できます(つまり、仮定は正しいです)。

于 2013-02-13T22:11:25.747 に答える