2

スレッドにメッセージキューがあるかどうかをthreadIdから確認する方法はありますか?

基本的に、スレッドにメッセージqueue.windowがある場合にのみ機能するWindowsAPIがいくつかあります。

4

4 に答える 4

7

スレッドのIDでPostThreadMessageを使用できます。PostThreadMessageがfalseを返し、GetLastErrorがを返すERROR_INVALID_THREAD_ID場合、スレッドIDが無効であるか、スレッドにメッセージキューがありません。

詳細情報http://msdn.microsoft.com/en-us/library/ms644946(VS.85).aspx

于 2009-11-24T12:07:35.363 に答える
2

マルチスレッドの世界では、探している間に変更される可能性のあるものを適切に説明することはできません。スレッドメッセージキューは特に面白いです。それらは、スレッドがそれらを必要とするときに作成されます。したがって、あなたが得ることができる唯一の答えは、「私が最後にチェックしたときではない」です。

その結果、スレッドメッセージキューがない場合、ほとんどのWindowsAPIは実際には失敗しません。彼らは単にそれを作成します。例外が1つありますPostThreadMessage。そのためには、別のスレッドのスレッドメッセージキューを作成する必要があります。これは、他のスレッドが独自のスレッドを作成しているときに発生する可能性があります。したがって、失敗する可能性のあるAPIはこれだけです。

PostThreadMessageしかし、失敗するのは悪いことですか?これは、( `GetLastError()を介して)Windowsがメッセージを配信しようとしたときに、重要な瞬間にキューが存在しなかったことを示しています。

于 2009-11-26T14:56:27.643 に答える
2

IsGUIThreadは必要な関数だと思います

于 2010-07-22T14:56:08.267 に答える
0

メッセージキューを持っているスレッドからAttachThreadInputを使用してみることができます。呼び出しで参照されているいずれかのスレッドにキューがない場合、AttachThreadInputは失敗すると思います。ただし、AttachThreadInputは他の理由で失敗する可能性があることに注意してください。

于 2009-11-24T11:29:06.523 に答える