C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[7643] Re:Re:Re:[질문] 10ms나 그이하의 타이머가 필요하거든요...
정재룡.구보 [gubo] 3529 읽음    2001-05-21 15:18
앞에서 말한 Timer는 일반적으로 말하는 API 타이머로...
이거는 별로 신뢰성이 없지요..
특히 최대 빈도수가 초당18번(약55ms)밖에 안되는데다가...
여러가지 Task를  하게되면 그시간이 영향을 받게 되고..
그래서 더 빠르고 정확한 시간을 얻기위해..
멀티미디어 타이머를 사용합니다..

밑에 보시면 알겠지만.. 멀티미디어 타이머는
CPU의 리소르를 많이 잡아먹기 때문에...
한 프로그램에서 되도록이면, 여러개를 쓰지않는것이 좋습니다.

그리고 제가 이 타이머로 신호를 프린트포트로 보내서..
오실로 스코프로 찍어 보았는데...
10msec에서는 정확하게 나왔는데...
그 이하로 내려가면 정확한 신호가 나오지 않더군요...헐...

아무튼 10ms는 믿을만한 성능을 얻을수 있을 겁니다.

그리고 멀티미디어 타이머 컴포넌트가 나와 있는것이 있는데..
여기서도 봤던거 같은데..훔...

제 홈피의 자료실에가시면 받으실수 있습니다.(www.newsm5.com)


아래는 멀티미디어 타이머에 대한 퍼온글입니다..
++++++++++++++++++++++++++++++++++++++++++++++
3. 멀티미디어 타이머

1> 멀티미디어 타이머의 개요

전술한 API 표준 타이머는 메세지 방식의 우선 순위 때문에  정교한 제어를 위해
서는 별로 유용하지 못하다. 게다가 최대 빈도수가 초당 18 타임이기 때문에 그보
다 더 정확한 1/1000 초를 제어할 수 있는 타이머가 요구되어 졌는데 그것이 바로
이 멀티미디어 타이머이다. 이것은 MIDI 시퀀스 장치 또는  다른 전문 하드웨어에
대한 MIDI 이벤트 제어처럼 애플리케이션의 정확한 타이밍을  요구할 때 사용되어
진다.

이 멀티미디어  타이머가 API  타이머와 다른   점이라면 Timer Event  Callback
Notification 메커니즘이라는 것이다. ( API 타이머는 애플리케이션  메세지 큐에
WM_TIMER 삽입 )

2> 함수 요약

    timeGetDevCaps    타이머가 지원하는 최소 최대 해상도를 알아낸다.
    timeBeginPeriod   최소의 타이머 해상도를 결정한다.
    timeEndPeriod     timeBeginPeriod 에 의해 만들어진 타이머 해상도를 제거
                      한다.
    timeSetEvent      타이머 이벤트를 시작하고 간격에 따라 콜백 함수를 호출
                      한다.
    timeKillEvent     타이머 이벤트를 끝낸다.

여기서 timeBeginPeriod 에 의해 넘겨지는 밀리 초 단위의 최소 타이머 해상도는
그 해상도에 대한 ID 처럼 생각할 수 있으며 timeEndPeriod 에 의해 제거 될 때도
그 최소 해상도를 넘겨 주어야 제거 가능하다. timeSetEvent  로 타이머 이벤트를
시작하기 전에   항상 최소  타이머  해상도가 정해져야   하며 타이머  이벤트가
timeKillEvent 로 제가 된 후에는 항상 제거 되어져야 한다.

또, 정확한  밀리  초 단위의   시간을 얻고자  할 때는   timeGetSystemTime 과
timeGetTime 을 사용하면 되는데 이  두개의 함수는 API 타이머에서  같은 기능을
하는 GetTickCount() 나 GetCurrentTime() 와는 달리 실질적인 밀리 초 정보를 제
공한다.

3> 멀티미디어 타이머의 단점

이것은 상당히 정확한 이벤트를 제공하는 반면에 그 만큼  시스템에 많은 부담을
주게 되므로 여러 개의 타이머를  동시에 돌리기에는 많은 시스템의  부하가 따른
다.

또 하나의 문제는 콜백 함수의  제한성에 있다. API 타이머의 콜백  함수는 일반
메세지와 같이 처리 되기 때문에 아무런 제약이  없었으나 멀티미디어 타이머에서
는 콜백 함수 내에서 사용할 수 있는 함수가 정해져 있고, 정해진 함수 이외의 사
용자 함수나 API 등을 호출하면 예측할 수 없는 결과를 초래하게 된다. 정해진 함
수란,  PostMessage(),  timeGetSystemTime(),  timeGetTime(),  timeSetEvent(),
timeKillEvent(),         midiOutShortMessage(),        midiOutLongMessage(),
OutputDebugString() 이 전부이다. PostMessage()와  OutputDebugString() 을  제
외하고는 모두 멀티미디어 함수들 뿐이다. 즉, 멀티미디어 용도 외에 타이머를 사
용하려면 모두 PostMessage()를 사용하여 다시 메세지를 발생해야 하는 것이다. (
API 타이머 보다야 빠르겠지만 대단한 클럭 낭비다. )

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

+ -

관련 글 리스트
7633 [질문] 10ms나 그이하의 타이머가 필요하거든요... 최은영 1301 2001/05/21
7638     Re:[질문] 10ms나 그이하의 타이머가 필요하거든요... 서영호 1641 2001/05/21
7639         Re:Re:[질문] 10ms나 그이하의 타이머가 필요하거든요... 최은영 1841 2001/05/21
7648             Re:Re:Re:[질문] 10ms나 그이하의 타이머가 필요하거든요... 서영호 1491 2001/05/21
7643             Re:Re:Re:[질문] 10ms나 그이하의 타이머가 필요하거든요... 정재룡.구보 3529 2001/05/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.