串流執行緒和篩選圖形管理員

[與此頁面相關的功能 DirectShow是舊版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音訊/視訊擷取取代。 這些功能已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用 MediaPlayerIMFMediaEngine音訊/視訊擷取 ,而不是 DirectShow。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。

當 Filter Graph 管理員停止圖形時,它會等候所有串流執行緒關閉。 這對篩選有下列影響:

  • 篩選絕對不能從串流執行緒呼叫 Filter Graph 管理員上的方法。

    Filter Graph 管理員會使用重要區段來同步處理自己的作業。 如果串流執行緒嘗試保存此重要區段,可能會導致死結。 例如:假設另一個執行緒停止圖形。 該執行緒會採用篩選圖形鎖定,並等候篩選停止傳遞資料。 如果您的篩選正在等候鎖定,則永遠不會停止,導致死結。

  • 篩選絕對不能從串流執行緒 新增RefQueryInterface Filter Graph 管理員。

    如果篩選準則會透過 AddRefQueryInterface) ,在 Filter Graph Manager 上保留參考計數 (,它可能會變成最後一個物件來保存參考計數。 當篩選呼叫 Release時,篩選圖形管理員會自行終結。 在清理常式內,Filter Graph 管理員會嘗試停止圖形,使其等待串流執行緒結束。 不過,它會在串流執行緒內等候,因此串流執行緒無法結束。 結果是死結。