mfc 멀티미디어 타이머 예제

큐 타이머는 타이머 큐에 있는 경량 커널 개체입니다. 대부분의 타이머와 마찬가지로 지정된 기한 이 도착할 때 호출할 콜백 함수를 지정할 수 있습니다. 이 경우 Windows 스레드 풀의 스레드에서 작업이 수행됩니다. 멀티미디어 타이머를 사용할 때 첫 번째 단계는 타이머 해상도를 설정하는 것입니다. 타이머 해상도는 무엇입니까? 타이머의 정확도를 결정합니다. 예를 들어, 경과 시간이 1000이고 해상도가 50이면 멀티미디어 타이머는 950- 1050밀리초마다 “틱”됩니다. 먼저 타이머 큐가 수행하는 작업을 검토합니다. 타이머 대기열은 다양한 시간에 실행해야 하는 많은 이벤트가 있는 경우에 사용됩니다. 타이머 큐가 수행하는 일은 정렬된 타이머 목록을 유지하고 가장 가까운 기한을 가진 타이머를 반복적으로 처리합니다. 많은 타이머가 있을 때 자체 타이밍을 유지하는 코드 조각이 없기 때문에 타이머가 많을 때 더 효율적일 뿐만 아니라 제한된 타이밍 리소스를 멀티플렉스할 수 있기 때문에 강력한 기술이기도 합니다. 시스템 리소스를 많이 소비하지 않고 정확한 타이밍이 필요하지 않은 UI 타이머와 같은 우선 순위가 낮고 장기 타이머가 많은 경우 특히 좋습니다. 이러한 타이머 함수는 시간 기준 이벤트를 기반으로 합니다.

CreateTimedEvent()에서 반환되는 핸들은 실제로 시간 서비스 루틴에 의해 신호된 상태가 감독되는 명명된 이벤트에 대한 핸들입니다. WaitForSingleObject 또는 WaitForMultipleObjects와 같은 표준 대기 함수는 고해상도 타이머 이벤트를 기다리는 데 사용할 수 있습니다. 플랫폼 A는 단순히 초당 64 타이머 인터럽트 (64 x 156,250 x 100 ns = 1 s)를 가지고 있지만 플랫폼 B를 볼 때 어려움은 더 분명해집니다 : 초당 99.856 인터럽트? 답변: 전체 두 번째 인터럽트를 모든 플랫폼에서 사용할 수 없습니다. 고정 TSC는 모든 ACPI P–, 및 T 상태에서 일정한 속도로 실행됩니다. 이것은 앞으로 이동하는 아키텍처 동작입니다. 고정 TSC가 지원하는 프로세서에서 OS는 벽 시계 타이머 서비스(ACPI 또는 HPET 타이머 대신)에 TSC를 사용할 수 있습니다. TSC 읽기는 훨씬 더 효율적이며 링 전환 또는 플랫폼 리소스에 대한 액세스와 관련된 오버헤드가 발생하지 않습니다.” 먼저 타이머를 만들고 기본 타이머 큐에 추가해야 합니다. 이를 위해 부팅 중 성능 카운터 주파수의 보정이 섹션 2.4에 설명되어 있습니다.

위의 목록에서 볼 수 있는 작은 편차는 교정 정확도의 결과입니다. 다시: TSC 주파수는 HPET 타이머 기간에 대해 보정됩니다. 이것은 부팅 시간을 너무 많이 연장하지 않는 합리적인 짧은 시간에 수행해야합니다. 나머지 편차는 작지만 눈에 띄는(예: 9ms 기간 동안 9,0012의 1.2 μs는 840ppm에 해당합니다!). 앞서 언급했듯이 멀티미디어 타이머는 자체 스레드에서 실행됩니다. 윈도우의 시간 서비스는 새 버전의 Windows에서 변경되었습니다. VISTA 및 Server 2008 이후에도 상당한 변경 사항이 보고될 예정입니다. 하드웨어 및 소프트웨어 개발의 동시적인 발전을 위해서는 소프트웨어가 다양한 하드웨어 플랫폼과 호환상태를 유지해야 합니다. 반면에 새로운 하드웨어를 사용하면 소프트웨어가 더 나은 성능을 정복할 수 있습니다. 오늘날의 하드웨어는 고정밀 이벤트 타이머(HPET)와 불변 타임스탬프 카운터(TSC)를 제공합니다. 타이머의 다양성은 “멀티미디어 타이머 지원을 제공하기위한 지침”에 설명되어 있습니다.