質問は私には少しわかりません。内部でモーダル メッセージ ループに入る 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 メッセージが原因でモーダル ループが終了した場合、終了後に独自の終了メッセージを送信する必要があります (アプリが終了することを認識できるようにするため)。食べない場合、アプリケーションは終了します。