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
[3784] Re:Re: 상세한 답변과 email까지... 정말 감사합니다.
정준하 [] 3762 읽음    2000-07-21 00:00
향기 님이 쓰신 글 :
: 일반적으로 윈도우 타이머는 50 ms 이하의 처리는
: 불가능 합니다. (제가가지고 있는 자료를 올립니다.)
: 이유는 잘 모르겠지만 NT 는 10 ms 정도까지는 된다구도 하지만 잘 모르죠?
:
: 타이머는 지정된 시간마다 주기적으로 애플리케이션에 메시지를 전달해주는 기능.
: 예를 들어 ‘5초마다 신호를 보내라’고 설정하면 5초 단위로 WM_TIMER메세지가 전달
:
: 타이머의 용도 :
: 자동저장, 에니메이션, 멀티태스킹, 특히 멀티미디어에서 많이 사용.
:
: 시간 단위는 밀리초(milisecond), 1~4294967295밀리초까지 지정가능. 예를 들어 1000을 지정하면 매 1초마다 WM_TIMER메세지발생, 이론상으로 매초 1000번의 타이머가 발생할 수 있지만, 실제로 PC하드웨어는 초당 18.2번 발생. 즉 54.924밀리초 이하의 정밀도는 가질 수 없다(지정은 가능하다), 타이머 메시지는 프로그램이 메시지를 처리하는 속도와도 관련이 있다. 즉 하나의 타이머 메시지를 처리하지 못한 상태로 또 타이머를 받게 되면, 이전의 타이머 메시지는 없어진다.따라서 정밀한 제어계측과 같은 분야나 실시간 장비 제어같은 분야에서는 사용할 수 없다.
:
: 그래서 multimedia timer 를 사용하는데... 이건 제가 해보지는 않았습니다. 기본적으로 VC++
: 을 위해서 만들어 논것인데 조금만 모디파이하면 될것 같기도 하구.... 보내드릴곳이 없군요..
: 이멜 적어놓으시면 자료 보내 드리지요...
:
:
: -------------------------------------------------------------------------------------------
: //mmTimers.h
: #ifndef    ___multimedia_timers___
: #define    ___multimedia_timers___
:
:
: #include    <mmsystem.h>
:
:
:
: class CMMTimers
: {
: public:
:     CMMTimers(UINT resolution);
:     virtual ~CMMTimers();
:
:     UINT    getTimerRes() { return timerRes; };
:
:     bool    startTimer(UINT period,bool oneShot);
:     bool    stopTimer();
:
:     virtual void timerProc() {};
:
: protected:
:     UINT    timerRes;
:     UINT    timerId;
: };
:
:
: #endif
:
:
: -------------------------------------------------------------------------------------------
: //mmTimers.cpp
:
: #include    "StdAfx.h"
: #include    "mmTimers.h"
:
:
: CMMTimers::CMMTimers(UINT resolution) : timerRes(0), timerId(0)
: {
:     TIMECAPS    tc;
:
:     if (TIMERR_NOERROR == timeGetDevCaps(&tc,sizeof(TIMECAPS)))
:     {
:         timerRes = min(max(tc.wPeriodMin,resolution),tc.wPeriodMax);
:         timeBeginPeriod(timerRes);
:     }
: }
:
:
: CMMTimers::~CMMTimers()
: {
:     stopTimer();
:     if (0 != timerRes)
:     {
:         timeEndPeriod(timerRes);
:         timerRes = 0;
:     }
: }
:
:
: extern "C"
: void
: CALLBACK
: internalTimerProc(UINT id,UINT msg,DWORD dwUser,DWORD dw1,DWORD dw2)
: {
:     CMMTimers *    timer = (CMMTimers *)dwUser;
:
:     timer->timerProc();
: }
:
:
: bool CMMTimers::startTimer(UINT period,bool oneShot)
: {
:     bool        res = false;
:     MMRESULT    result;
:
:     result = timeSetEvent(period,timerRes,internalTimerProc,(DWORD)this,oneShot ? TIME_ONESHOT : TIME_PERIODIC);
:     if (NULL != result)
:     {
:         timerId = (UINT)result;
:         res = true;
:     }
:
:     return res;
: }
:
:
: bool CMMTimers::stopTimer()
: {
:     MMRESULT    result;
:
:     result = timeKillEvent(timerId);
:     if (TIMERR_NOERROR == result)
:         timerId = 0;
:
:     return TIMERR_NOERROR == result;
: }
:

+ -

관련 글 리스트
3768 50msec 이내로 클럭 event 발생시키는 방법 정준하 3851 2000/07/19
3769     Re:NT 나 Multimedia Timer 를 사용해 보세요.. 향기 5021 2000/07/19
3784         Re:Re: 상세한 답변과 email까지... 정말 감사합니다. 정준하 3762 2000/07/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.