[DirectShow 이 페이지와 연결된 기능은 레거시 기능입니다. MediaPlayer, IMFMediaEngine, Media Foundation 오디오/비디오 캡처대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. Microsoft는 가능하면 새로운 코드에서 MediaPlayer, IMFMediaEngine 및 Audio/Video Capture를 DirectShow대신 Media Foundation 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
필터 그래프 관리자가 그래프를 중지하면 모든 스트리밍 스레드가 종료되기를 기다립니다. 필터에는 다음과 같은 의미가 있습니다.
필터는 스트리밍 스레드에서 Filter Graph Manager의 메서드를 호출해서는 안됩니다.
필터 그래프 관리자는 중요한 섹션을 사용하여 자체 작업을 동기화합니다. 스트리밍 스레드가 이 중요한 섹션을 유지하려고 하면 교착 상태가 발생할 수 있습니다. 예: 다른 스레드가 그래프를 중지한다고 가정합니다. 해당 스레드는 필터 그래프 잠금을 사용하고 필터가 데이터 배달을 중지할 때까지 기다립니다. 필터가 잠금을 기다리는 경우 중지되지 않아 교착 상태가 발생합니다.
필터는 스트리밍 스레드에서 Filter Graph Manager를 AddRef하거나 QueryInterface하면 안 됩니다.
필터가 AddRef 또는 QueryInterface를 통해 Filter Graph Manager에 대한 참조 수를 보유하는 경우, 이는 참조 횟수를 보유하는 마지막 개체가 될 수 있습니다. 필터가 릴리스을 호출하면 필터 그래프 관리자가 스스로 소멸합니다. 정리 루틴 내에서 Filter Graph Manager는 그래프를 중지하려고 시도하여 스트리밍 스레드가 종료되기를 기다립니다. 그러나 스트리밍 스레드 내에서 대기 중이므로 스트리밍 스레드를 종료할 수 없습니다. 결과는 교착 상태입니다.