Multimedia Timer 사용시 고려할 사항 |
쭌이 진행하는 DirectShow 기반 프로젝트에서 각각의 자막 Object를 각각의 Timer를 사용해 유지 시간을 관리하는 이슈에서 Multimedia Timer의 사용이 언급되었다. 사용해본 결과 timeSetEvent() 함수를 사용해 Multimedia Timer를 생성하는데 Overhead 가 발생하였다.
그래서, Multimedia Timer에 대해 알아 보았다.
- Multimedia Timer에 대해 (참조 : http://www.opcware.com/XtraTimer/MultimediaTimers.html)
- 정밀도 즉 miliseconds 단위로 정확히 이벤트가 발생하여야 할때 유용하게 사용될 수 있는 Timer이다.
- 일반 타이머의 경우 시스템 부하에 따라 그 정확성을 담보하기 힘들지만 Multimedia 타이머의 경우 miliseconds 단위에서 정확성을 보장할 수 있다.
- Win32 Multimedia library(winmm.dll)에 Multimedia Timer가 구현되어 있다.
- 참고 문서에 따르면 Operating System에따라 일반 System timer의 Resolution과 사용가능한 Multimedia Timer의 제한이 따른다. 다만 System timer Resolution은 다른 시스템 부하가 없는 상태에서의 최대 보장되는 간격으로 부하에 따라 가변적이다.
Operating System |
System(일반) Timer Resolution |
사용가능한 최대 Multimedia Timer 개수 |
Windows 95 |
55ms |
32 |
Windows 98 |
55ms |
32 |
Windows NT 3.51 |
10ms |
16 per process |
Windows NT 4.0 |
10ms |
16 per process |
Windows 2000 |
10ms |
16 per process |
Windows XP |
10-15ms |
16 per process |
- timeSetEvent() 함수를 사용해 Multimedia Timer 생성 결과 약 1초 정도의 생성 부하가 생기는 것으로 보인다.
- 따라서 정확성을 요구하지 않는 경우 SetTimer()를 사용한 System Timer 사용을 권장한다.
- 또한 경우에 따라서는 1개의 Multimedia Timer를 생성하여 callback 함수에서 일종의 Poolling 방식으로 시간 관련 리소스를 제어 하는 방법이 있을 수 있다. Time 정확도와 시스템 부하 모두를 고려해야 할 경우 생각해 볼 수 있다.
- 또한 Waitable Timer( CreateWaitableTimer() )의 사용도 고려해 볼 수 있다
|
원본 위치 <http://www.codeforum.net/blog/pitoosung/category/프로그래밍?page=3&TSSESSION=26b94d00515facab38d5e38c674a88d6>