CAMSchedule 클래스
[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer, IMFMediaEngine 및 오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]
클래스는 CAMSchedule
참조 클록에 대한 스케줄러를 구현합니다.
Public 메서드 | Description |
---|---|
CAMSchedule | 생성자 메서드입니다. |
~CAMSchedule | 소멸자 메서드입니다. 가상. |
GetAdviseCount | 보류 중인 자문 요청 수를 검색합니다. |
GetNextAdviseTime | 다음 조언 요청 시간을 검색합니다. |
AddAdvisePacket | 보류 중인 요청 목록에 조언 요청을 추가합니다. |
Unadvise | 조언 요청을 제거합니다. |
조언 | 지정된 시간 또는 이전에 예약된 모든 요청을 디스패치합니다. |
GetEvent | 이벤트 핸들을 검색합니다. 이 핸들은 다음 조언 시간의 변화를 알리는 데 사용됩니다. |
설명
이 도우미 개체는 참조 시계에 대한 조언 요청 목록을 유지 관리합니다. CBaseReferenceClock 클래스는 이 클래스를 사용하여 조언 요청을 예약하는 데 도움이 됩니다. 클록은 다음과 같은 방식으로 이 개체를 사용합니다.
- 클록은 예약을 처리할 작업자 스레드를 만듭니다.
- 작업자 스레드는 CAMSchedule::GetEvent 메서드를 호출하여 스케줄러에서 이벤트 핸들을 검색합니다. 처음에는 무한 시간 제한으로 이 이벤트를 기다립니다.
- 새 조언 요청을 예약하기 위해 클록은 CAMSchedule::AddAdvisePacket 메서드를 호출합니다. 조언 요청은 일회성 또는 주기적일 수 있습니다. 스케줄러는 요청 목록을 시간 순서대로 유지합니다.
- 요청이 목록의 맨 앞에 추가되면 스케줄러는 이벤트에 신호를 보냅니다. (목록은 처음에 비어 있으므로 첫 번째 요청은 이벤트 신호를 보장합니다.)
- 이벤트가 신호를 받으면 작업자 스레드는 CAMSchedule::Advise 메서드를 호출하여 현재 참조 시간을 지정합니다. 보류 중인 요청이 만료된 경우 스케줄러는 요청을 디스패치합니다.
- Advise 메서드는 다음 요청의 시간을 반환합니다. 작업자 스레드는 이 값을 사용하여 새 시간 제한 값을 계산합니다.
- 2단계 6단계는 무기한 반복됩니다.
- 작업자 스레드를 종료하기 위해 클록은 내부 플래그를 설정하고 이벤트에 신호를 보냅니다.
2단계에서 이벤트가 신호를 받거나 대기 시간이 초과됩니다. 이벤트가 신호를 받으면 목록의 맨 앞에 새 요청이 추가되었음을 의미합니다. 작업자 스레드는 새 시간 제한 값을 계산해야 합니다. 반면에 대기 시간이 초과되면 자문 요청이 기한이 지 않아 디스패치되어야 했음을 의미합니다. 5단계의 Advise 호출은 두 경우를 모두 처리합니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|