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