DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CAMSchedule   [목차열람] [주소복사] [슬롯비우기]
CAMSchedule 클래스
 
Microsoft DirectX 9.0

CAMSchedule 클래스

CAMSchedule 클래스는, 기준 클럭의 스케줄을 처리 한다.

요건

헤더: Dsschedule.h 로 선언해, Streams.h 를 인클루드 한다.

라이브러리: Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).

퍼블릭 메서드  
CAMSchedule 생성자 메서드.
~CAMSchedule 소멸자 메서드. 가상.
GetAdviseCount 보류 상태의 아드바이즈 요구의 수를 얻어온다.
GetNextAdviseTime 다음의 아드바이즈 요구의 타임을 얻어온다.
AddAdvisePacket 보류 상태의 요구 리스트에 아드바이즈 요구를 추가한다.
Unadvise 아드바이즈 요구를 삭제한다.
Advise 특정의 타임 또는 그 이전에 스케줄 된, 모든 요구를 디스패치 한다.
GetEvent 이벤트 핸들을 얻어온다. 이것은, 다음의 아드바이즈타임의 변경을 통지하기 위해서 사용된다.

주의

이 헬퍼-개체는, 기준 클럭의 아드바이즈 요구의 리스트를 유지한다. CBaseReferenceClock 클래스는, 이 개체를 사용해 아드바이즈 요구의 스케줄링을 돕는다. 클럭은, 이 개체를 다음과 같이 사용한다.

  1. 클럭은, 워커 thread를 생성 해 스케줄링을 처리한다.
  2. 워커 thread는 CAMSchedule::GetEvent 메서드를 호출해, 스케쥴러로부터 이벤트 핸들을 얻어온다. thread는, 처음은 무한 타임 아웃이 지정된 상태로, 이 이벤트로 대기 상태가 된다.
  3. 새로운 아드바이즈 요구를 스케줄 하기 위한(해), 클럭은 CAMSchedule::AddAdvisePacket 메서드를 호출한다. 아드바이즈 요구는, 단발 또는 주기적인 것으로 할 수가 있다. 스케쥴러는, 시간순서에 요구 리스트를 유지한다.
  4. 리스트의 선두에 요구가 추가되면 스케쥴러는 이벤트를 통지한다. 이 리스트는 처음에 비었으므로, 최초의 요구가 있으면 이벤트는 확실히 통지된다.
  5. 이벤트가 신호 상태가 되면 워커 thread는 CAMSchedule::Advise 메서드를 호출해, 현재의 기준 타임을 지정한다. 보류 상태의 요구의 유효기간이 끊어지면 스케쥴러는 그러한 요구를 디스패치 한다.
  6. Advise 메서드는, 다음의 요구의 타임을 돌려준다. 워커 thread는 이 값을 사용해, 새로운 타임 아웃값을 계산한다.
  7. 스텝 2 ~ 6 은, 무한하게 반복된다.
  8. 워커 thread를 종료하기 위해 클럭은 내부 플래그를 설정하여 이벤트를 통지한다.

스텝 2 에서는, 이벤트가 신호 상태가 되는지, 또는 기다리는 타임 아웃이 발생한다. 이벤트가 신호 상태가 되었을 경우, 새로운 요구가 리스트의 선두에 추가된 것을 의미한다. 워커 thread는 새로운 타임 아웃값을 계산해야 한다. 한편, 기다리는 타임 아웃이 발생했을 경우는 아드바이즈 요구의 기한이 지나고 있어 디스패치 되지 않으면 안 되는 것을 의미한다. 어느 경우도 스텝 5 의 Advise 의 호출에 의해 처리를 한다.

↑TOP