|
아래 답변주신 분 말씀대로 타이머 자체가 메세지 기반인 탓에,
50ms와 같은 짧은 인터벌로 타이머를 사용하는 것은 상당히 위험합니다.
제 경우에는 제어계측 쪽 일을 하면서 2ms 단위까지 데이터를 뽑아야 될 일이 있었습니다만,
가장 속 편한 경우는 DOS에서 인터럽트를 이용하는 방법입니다.
Windows의 경우에는 이런저런 추상화가 이루어져서 어플리케이션 단에서는 인터럽트에 접근하는 것 자체가 불가능합니다. 따라서, DOS에서처럼 인터럽트를 이용하려면 WDM을 이용해서 윈도우즈 드라이버까지 제작을 해야되는 것으로 알고 있습니다. 드라이버단에서 인터럽트를 발생시키는 거죠.
찾아보시면 범용으로 이러한 작업을 해주는 드라이버 자체를 콤포넌트화시켜서 판매하는 경우도 있었던 듯 합니다. 한번 찾아보시는 것도 좋을 겁니다.
더 정확한 작업을 위해서는 real time os 라는 게 존재합니다. 윈도우 커널 자체를 수정해놓은 것으로, win nt 시절에 사용해봤습니다만, 그 때 당시 수천만원 정도였다고 하니, 의미 없을 듯 합니다.
꼼수로, 아래 답변주신 분 말씀대로 서브쓰레드를 작성하셔서 priorty를 최대로 한후 해당 쓰레드의 루프 안에서 gettickcount 와 같은 함수를 써서 원하는 인터벌 단위로 작업을 하는 것도 가능합니다. 인터벌의 정확도는 직접 테스트 해보셔야 할 것 같습니다.
다만, 어떤 경우에도 해당 작업이 원하는 인터벌 안에 처리 가능해야지만 의미가 있을 듯 합니다.
빈라덴 님이 쓰신 글 :
: 일단 타이머를 써서 작업을 하고자 합니다.
: 우선 볼랜드에서 지원해주는 Timer외에 MMTimer와 ThTimer를 사용하고 있습니다.
: 우선 세가지가 뭐가 차이가 있는지 알려주세요.
:
: 또하나는 현재 50msec으로 타이머 인터벌을 설정했는데
: 타이머는 3개를 쓰고 있습니다.
:
: 버튼을 누르면
:
: timer1->Enabled = true;
: timer2->Enabled = true;
: timer3->Enabled = true;
:
: 이렇게 시작됩니다.
:
: 질문은 정말 동시에 차이 없이 똑같이 타이머가 동시에 움직입니까?
:
: 또 다른 질문은 만약... 타이머가 동작하는데 50msec에 작업을 다 마치지 못하면
: 설정은 50msec으로 했다고 하더라도 처리가 지연될 수도 있습니까?
: 가령 한타이머에서 처리할 수 있는 것이 50msec을 초과할 경우......
|