|
Windows Timer는
해상도가 10ms 보다 큽니다.
TTimer의 Interval은 1ms간격으로 입력받기는 하지만..
Interval을 1ms로 준다고 해서 1초에 1000번 이벤트가 발생하지 않습니다.
정확하게는 잘모르는데요.. 10ms보다는 확실히 큰걸로 알고있습니다.
Interval을 1로 주고 테스트 해보니 평균 1초당 event가 63~64회정도 발생하네요
대충 15ms 정도는 걸린다는 얘기..
더 세밀한 해상도의 timer를 구현하려면... Windows Timer가 아닌 다른 방식을 이용해야할것입니다.
그럼...
김정렬 님이 쓰신 글 :
: 제가 0.01 초 단위로 시간을 측정하는 타이머를 만들고자 합니다.
:
: 간단하게 폼을 만들고 타이머를 만들었는데요
:
: isvnsgmntnlg1 이건 세그먼트 표시하는 컴포넌트입니다.
:
: 그냥 값을 뿌려주는거죠
:
: 간단하게 테스트 해볼려고 타이머 만들고 돌려봤는데 실제 시간보다 약간 느리더라구요
: 한 0.5초 정도 ?
:
: 타이머 컴포넌트는 기본적으로 깔려있는 시스템 컴포넌트의 타이머를 썼습니다.
:
:
: 코드라고 할것도 없고.. 정말 간단한 내용입니다.
:
: 0.01씩 타이머가 늘려가면서 값을 뿌려주는건데요
:
: 이게 제 컴포넌트에 값을 뿌려줄때 딜레이가 걸려서 그런것인지 아니면 제 컴퓨터 cpu가 처리를 늦게 해서 그런것인지
: 궁금합니다.
:
:
: 컴포넌트는 10ms 까지 처리 된다고 하니깐 0.01초 까지 되야 되는데 말이죠 ;
:
: 아래 소스 파일이랑 실행파일 올렸습니다.
:
:
: 조언을 부탁 드립니다~
:
:
: //---------------------------------------------------------------------------
:
: double timer_cnt=0.01;
: //---------------------------------------------------------------------------
: void __fastcall TForm1::tmr1Timer(TObject *Sender)
: {
:
: isvnsgmntnlg1->Value += timer_cnt;
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::btn1Click(TObject *Sender)
: {
: tmr1->Enabled=true;
:
: }
: //---------------------------------------------
|