私は本質的にシングルスレッドのプログラムに取り組んでおり、その唯一のスレッドはメインのイベントループスレッドです。したがって、そのすべてのデータ構造は、基本的にクリティカル リージョンのようなものによって保護されていません。
DirectShow API に基づくいくつかの新しい機能が最近統合されるまで、問題なく動作します。一部の DirectShow API は 2 番目のイベント ループを開き、その 2 番目のループ内でメッセージをディスパッチします (つまり、他のイベント処理コールバックを予期せずに呼び出します)。そのため、2 番目のイベント処理関数が呼び出されると、DirectShow API を呼び出す関数によってアクセスされているデータ構造体が破損する可能性があります。
カーネルプログラミングの経験があります。そして、私の頭に浮かぶのは、シングルスレッドプログラムの場合、データ構造を処理する方法は、カーネルが CPU ごとのデータ構造を処理する方法と非常に似ているということです。また、カーネルでは、関数が CPU ごとのデータにアクセスする場合、割り込みを無効にする必要があります (2 番目のイベントループでのメッセージディスパッチと非常に似ています)。ただし、DirectShow API の呼び出しを回避したり、それらの中で 2 番目のイベント ループが作成されないようにする簡単な方法はありません。何か方法はありますか?