다음을 통해 공유


CAMSchedule 클래스

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngineMedia Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

클래스는 CAMSchedule 참조 클록에 대한 스케줄러를 구현합니다.

Public 메서드 Description
CAMSchedule 생성자 메서드입니다.
~CAMSchedule 소멸자 메서드입니다. 가상.
GetAdviseCount 보류 중인 자문 요청 수를 검색합니다.
GetNextAdviseTime 다음 조언 요청 시간을 검색합니다.
AddAdvisePacket 보류 중인 요청 목록에 조언 요청을 추가합니다.
Unadvise 조언 요청을 제거합니다.
조언 지정된 시간 또는 이전에 예약된 모든 요청을 디스패치합니다.
GetEvent 이벤트 핸들을 검색합니다. 이 핸들은 다음 조언 시간의 변화를 알리는 데 사용됩니다.

설명

이 도우미 개체는 참조 시계에 대한 조언 요청 목록을 유지 관리합니다. CBaseReferenceClock 클래스는 이 클래스를 사용하여 조언 요청을 예약하는 데 도움이 됩니다. 클록은 다음과 같은 방식으로 이 개체를 사용합니다.

  1. 클록은 예약을 처리할 작업자 스레드를 만듭니다.
  2. 작업자 스레드는 CAMSchedule::GetEvent 메서드를 호출하여 스케줄러에서 이벤트 핸들을 검색합니다. 처음에는 무한 시간 제한으로 이 이벤트를 기다립니다.
  3. 새 조언 요청을 예약하기 위해 클록은 CAMSchedule::AddAdvisePacket 메서드를 호출합니다. 조언 요청은 일회성 또는 주기적일 수 있습니다. 스케줄러는 요청 목록을 시간 순서대로 유지합니다.
  4. 요청이 목록의 맨 앞에 추가되면 스케줄러는 이벤트에 신호를 보냅니다. (목록은 처음에 비어 있으므로 첫 번째 요청은 이벤트 신호를 보장합니다.)
  5. 이벤트가 신호를 받으면 작업자 스레드는 CAMSchedule::Advise 메서드를 호출하여 현재 참조 시간을 지정합니다. 보류 중인 요청이 만료된 경우 스케줄러는 요청을 디스패치합니다.
  6. Advise 메서드는 다음 요청의 시간을 반환합니다. 작업자 스레드는 이 값을 사용하여 새 시간 제한 값을 계산합니다.
  7. 2단계 6단계는 무기한 반복됩니다.
  8. 작업자 스레드를 종료하기 위해 클록은 내부 플래그를 설정하고 이벤트에 신호를 보냅니다.

2단계에서 이벤트가 신호를 받거나 대기 시간이 초과됩니다. 이벤트가 신호를 받으면 목록의 맨 앞에 새 요청이 추가되었음을 의미합니다. 작업자 스레드는 새 시간 제한 값을 계산해야 합니다. 반면에 대기 시간이 초과되면 자문 요청이 기한이 지 않아 디스패치되어야 했음을 의미합니다. 5단계의 Advise 호출은 두 경우를 모두 처리합니다.

요구 사항

요구 사항
헤더
Dsschedule.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)