1

DSPACK コンポーネント ライブラリを使用して Delphi 6 で記述された DirectShow フィルタがあります。現在、FillBuffer() 呼び出しの先頭でその目的のために作成された同期 obj を使用してフィルター状態をロックし、最後に解放します ( try/finally コンストラクトのfinallyセクション内)。FillBuffer() 呼び出しは、データ生成タスクを満たすスレッドによって解放される WaitForSingleObject() 呼び出しを介して、新しいデータが送信されるのを待っている間にブロックされる可能性があるため、これは悪い考えですか? FillBuffer() 呼び出しが (比較的) 長時間ブロックされると、フィルターまたはフィルター グラフ全体に悪影響を及ぼす可能性があることを懸念しています。

4

1 に答える 1

1

ロックされていないクリティカル セクションで待機する必要があります。そうしないと、フィルター グラフの状態を変更する要求などで、待機中のワーカー スレッドが制御スレッドをブロックするなど、最終的に問題が発生します。

于 2011-11-21T07:46:58.483 に答える