CCmdQueue 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스는 CCmdQueue
큐에 대기 중인 명령을 추가, 제거, 검사 상태 및 호출할 CDeferredCommand 개체 및 멤버 함수의 큐를 제공하는 기본 클래스입니다.
CCmdQueue
개체는 IQueueCommand 메서드를 구현하는 개체의 일부입니다. 필터 그래프 관리자는 애플리케이션이 필터 그래프에 명령을 큐에 대기할 수 있도록 IQueueCommand 메서드를 구현합니다.
IQueueCommand 인터페이스를 구현하는 필터는 이 클래스를 직접 사용합니다.
CDeferredCommand 개체를 사용하려면 큐가 이 클래스에서 파생되어야 합니다.
동기화에는 거칠고 정확한 두 가지 모드가 있습니다. 거친 모드에서 애플리케이션은 지정된 시간이 도착할 때까지 기다린 다음 명령을 실행합니다. 정확한 모드에서 애플리케이션은 당시에 표시되는 샘플에서 처리가 시작될 때까지 기다린 다음 명령을 실행합니다. 필터는 구현할 필터를 결정합니다. 필터 그래프 관리자는 항상 필터 그래프 관리자에서 큐에 대기 중인 명령에 대해 거친 모드를 구현합니다.
거친 동기화를 원하는 경우 명령 기한이 있을 때까지 기다린 다음 실행하려고 할 수 있습니다. CCmdQueue::GetDueCommand를 호출하여 이 작업을 수행할 수 있습니다. 대기해야 할 몇 가지 사항이 있는 경우 CCmdQueue::GetDueHandle 에서 이벤트 핸들을 가져오고 신호가 표시되면 CCmdQueue::GetDueCommand 를 호출합니다. 스트림 시간은CCmdQueue::Run 및 CCmdQueue::EndRun 멤버 함수에 대한 호출 간에만 진행됩니다. 핸들이 설정되면 명령이 준비된다는 보장은 없습니다. 이벤트가 신호를 받을 때마다 GetDueCommand 멤버 함수를 호출합니다(아마도 시간 제한은 0일 수 있음). 명령이 준비되지 않은 경우 E_ABORT 반환할 수 있습니다.
정확한 동기화를 원하는 경우 CCmdQueue::GetCommandDueFor 멤버 함수를 호출하고 처리하려는 샘플을 매개 변수로 전달합니다. 그러면 다음이 반환됩니다.
- 해당 스트림 시간 또는 그 이전의 스트림 시간 명령입니다.
- 스트림 시간을 프레젠테이션할 때 또는 그 이전의 프레젠테이션 시간 명령입니다. CCmdQueue::Run 및 CCmdQueue::EndRun 멤버 함수 간에만 이 작업을 수행합니다. 이 작업 외에는 스트림 시간에서 프레젠테이션 시간으로의 매핑을 알 수 없기 때문입니다.
- 프레젠테이션 시간 명령이 지금 기한입니다.
일시 중지 모드 중에 처리될 수 있는 샘플에 대한 정확한 동기화를 원하는 경우 스트림 시간 명령을 사용해야 합니다.
모든 경우에 명령은 호출되거나 취소될 때까지 큐에 대기 상태로 유지됩니다. 이벤트 핸들의 설정 및 재설정은 이 큐 개체에 의해 전적으로 관리됩니다.
보호된 데이터 멤버 | Description |
---|---|
m_bRunning | 실행 상태에 대한 플래그입니다. 실행 시 TRUE 를 설정합니다. |
m_dwAdvise | 참조 클록의 식별자를 조언합니다(미해결 조언이 없는 경우 0). |
m_evDue | 명령이 기한이 지정되는 시간을 설정합니다. |
m_listPresentation | 프레젠테이션 시간에 큐에 대기 중인 명령을 저장합니다. |
m_listStream | 스트림 시간에 큐에 대기 중인 명령을 저장합니다. |
m_Lock | 목록에 대한 액세스를 보호합니다. |
m_pClock | 현재 참조 클록입니다. |
m_StreamTimeOffset | m_bRunningTRUE인 경우 스트림 시간 오프셋을 포함합니다. |
m_StreamTimeOffset | m_bRunningTRUE인 경우 스트림 시간 오프셋을 포함합니다. |
멤버 함수 | Description |
CCmdQueue | CCmdQueue 개체를 생성합니다. |
CheckTime | 지정된 시간이 기한인지 확인합니다. |
GetDueHandle | 신호를 받을 이벤트 핸들을 검색합니다. |
재정의 가능한 멤버 함수 | Description |
EndRun | 중지되거나 일시 중지된 모드로 전환됩니다. |
GetCommandDueFor | 지정된 시간에 예약된 지연된 명령을 검색합니다. |
GetDueCommand | 기한이 지정된 다음 명령에 대한 포인터를 검색합니다. |
삽입 | CDeferredCommand 개체를 큐에 추가합니다. |
새로 만들기 | 실행할 명령을 초기화하고 새 CDeferredCommand 개체를 반환합니다. |
제거 | 큐에서 CDeferredCommand 개체를 제거합니다. |
실행 | 실행 모드로 전환합니다. |
SetSyncSource | 타이밍에 사용되는 클록을 설정합니다. |
SetTimeAdvise | 참조 클록을 사용하여 타이머 이벤트를 설정합니다. |