Win32API質問箱 Build46

このエントリーをはてなブックマークに追加
374デフォルトの名無しさん
スレッドA : GetMessage() ループしている Windowなスレッド
スレッドB : 窓を持たない 非Window なスレッド
として、
スレッドB から スレッドA内で生成された Window に対しての SetWindowText() / SendMessage() は
スレッドA が動いていない場合には スレッドB内でブロックされるのでしょうか?
375デフォルトの名無しさん:2006/10/16(月) 12:36:57
何故試さない?
376374:2006/10/16(月) 12:47:28
デバッガではブロックされているように見えるんだけど
仕様なのかどうかわからないので質問してみました
377デフォルトの名無しさん:2006/10/16(月) 12:59:23
仕様
378デフォルトの名無しさん:2006/10/16(月) 13:07:28
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>f the specified window was created by a different thread, the system switches to that thread and calls the appropriate window procedure.
ウィンドウメッセージはそのウィンドウが所属するスレッドで処理される。
よって、スレッドAがsendされたメッセージを処理できない状態なら、スレッドBはブロックされる。

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/sendmessage.asp
>Note that the receiving thread need not yield control explicitly; calling any of the following functions can cause a thread to yield control implicitly.
>DialogBox, DialogBoxIndirect, DialogBoxIndirectParam, DialogBoxParam, GetMessage, MessageBox, PeekMessage, SendMessage
379374:2006/10/16(月) 13:15:54
>>377-378
ありがとうございます。 仕様ということで理解しました。
スレッド設計見直しか…

スレッドB が定期的に SendMessage してて、スレッドA の WM_CLOSE をきっかけに
スレッドB を停止させようとしてた(停止用 event をsignalにして theaed handle が signal まで待つ)のですが、
そこでデッドロックしていたと…