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

델파이 Q&A
Delphi Programming Q&A
[499] [답변] ROY/[초보?]1000분의1초 보다 더 정교하게...
이정욱 [ ] 2616 읽음    1997-12-31 11:46
안녕하세요?
질문하신 내용은 파워러브 델파이 7월호를 보시면 답이 있습니다.
그러나 답변이므로 어느정도 내용을 뽑아 왔습니다.
이것으로 모자르시다면 파워러브 델파이 7월호를 보세요.

옛날 델파이 1.0으로 코딩을 할 때 하이텔의 Vtool 계시판에 올라온 질문을
본 적이 있었다. 매우 빠른 타이머가 필요한데 TTimer로서는 느려서 안된다는
것이었다.  여기에 대한 답변으로 올라온 것이 MMSYSTEM.DLL 안에 있는 타이머를
이용하면 된다는 것이었는데 구체적인 방법에 대해서는 설명이 되어 있지 않았다.
필자의 경우 위의 말이 맞을 거라고 생각을 하였다. 회사에서 새로운 컴퓨터가
들어오면 주로 Xing MPEG Player의 diagonsis를 이용해서 속도를 측정을 하는데
초당 60프레임 이상이 나오는 경우도 많이 보았다. 만약 TTimer처럼 초당 약 18회
정도 발생하는 WM_TIMER로 초당 60번씩 발생하는 일을 처리할 수 없다는 것은 조금만
생각을 해도 알 수 있는 일이다. 따라서 WM_TIMER보다 더 빠른 타이머가 윈도우 내부의
어디에 있다는 것은 당연한 일이다.

  최근에 ASync Pro for Delphi라는 통신 콤포넌트를 분석을 하면서 MMSYSTEM.DLL에서
어떤 API를 GetProcAddress를 이용해서 포인터를 가져와서 사용하는 것을 본 적이
있었다. 그래서 그날부터 분석을 해 본 결과 역시 MMSYSTEM.DLL 안에 타이머가 있는
것을 볼 수 있었다. 델파이에 있는 TTimer는 Windows95라면 어느 시스템에 상관없이
거의 일정하게 초당 18회 정도 발생하는데 여기서 만든 mmsystem 타이머는 시스템에
매우 의존적이다.  따라서 어느 정도의 정확도를 가질 수 있는지 알아보기로 하자.
먼저 사용할 API 함수를 보자.

function timeGetDevCaps(
  lpTimeCaps: PTimeCaps;
  uSize: UINT
): MMRESULT; stdcall;

  위에서 PTimeCaps는 TTimeCaps의 포인터 형으로 이것은 아래와 같이 정의되어 있고
urted  }
    wPeriodMax: UINT; { maximum period supported  }
  end;

  위와 같이 간단한 API는 독자 여러분들도 테스트할 수 있을 것으로 생각을 하고
그냥 소개만 하는 것으로 하겠다. 참고로 필자의 Pentium 100 Win95에서는 wPeriodMin은
1이 나왔고 wPeroidMax는 65535가 나왔다. 이것은 가장 높은 정확도가 1ms라는 것을 뜻하는
것이다.


파워러브 델파이 97년 7월호!!!


+ -

관련 글 리스트
499 [답변] ROY/[초보?]1000분의1초 보다 더 정교하게... 이정욱 2616 1997/12/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.