2009-05-10 2 views
1

私は完全にシングルスレッドで、どのデータ構造に対しても保護されていないWindowsプログラムで作業しています。ただし、プログラムでは、内部メッセージディスパッチ処理IVideoWindow :: put_Visibleを開くDirectShow APIを使用します。したがって、IVideoWindow :: put_Visibleメソッドを呼び出すイベント処理関数は、他のイベント処理関数でデータを破損する可能性があります。ハンドラ内でメッセージディスパッチをオフにする

API内でこのようなメッセージディスパッチを防止する方法はありますか?

答えて

0

質問は私には少し不明です。あなたは内部的にモーダルメッセージループに入るAPIについて話していますか?これがあなたに何らかの再入国問題を作り出しているのでしょうか?そのような場合は、おそらくあなたの問題を解決するためのより良い方法があります。 APIがモーダルループに入っている場合は、間違いなく良い理由があります。そうすることを許可する必要があります。 (あなたの場合は、DirectShowが別のCOMオブジェクトと内部的に通信していると思います)。正しく書かれている場合、モーダルループは同じスレッド上の他のウィンドウにメッセージをディスパッチします。最後のステップは重要である

PostQuitMessage(0); // Signal quit to force the upcoming loop to exit 
APIFunc(); // Enters modal loop internally 
MSG msg; 
PeekMessage(&msg, NULL, WM_QUIT, WM_QUIT, PM_REMOVE); // Eat the next WM_QUIT 

:あなたは本当にこれをしたい場合はどのような場合には

は、ここに方法です。 WM_QUITメッセージのためにモーダルループが終了すると、終了後に(アプリケーションが終了することを知るために)独自の終了メッセージを送信する必要があります。あなたがそれを食べないと、あなたのアプリケーションは終了します。

関連する問題