|
타이머 인터발 관련 글은.. 여기 검색해 보시면 답이 나옵니다.
다음이는 질문전에 검색을 해보세요.
윈도우 타이머는 50ms 이내 에서는..
오차가 많이 발생합니다.
또 50ms 이상이라고 해도..
멀티 태스킹 os 특성상.. 다른쪽 등에서 과부하가 걸리거나 하면..
당연히 또 오차가 발생합니다.
1ms 정확도로 동작을 시키려면..
멀티미디어 타이머가 따로 있는에.. 사용에 제약도 있고..
일반 타이머 보단 조금 복잡합니다.
1 ms 단위로 아주 정밀한 제어가 필요하면...
os 를 vxworks 같은 real time os 로 변경하시는게 나을수도 있습니다.
프로그램 초짜 님이 쓰신 글 :
: 제가 타이머 인타발을 20으로 하고
:
: 타이머 내부에서 아이들을 50을 주고 1초를 만들엇는데요
: Start
: The time is Sec 0 of MSec 772
: The time is Sec 0 of MSec 772
: Start
: The time is Sec 0 of MSec 804
: The time is Sec 0 of MSec 804
: Start
: The time is Sec 0 of MSec 835
: The time is Sec 0 of MSec 835
: Start
: The time is Sec 0 of MSec 866
: The time is Sec 0 of MSec 866
: Start
: The time is Sec 0 of MSec 897
: The time is Sec 0 of MSec 897
: Start
: The time is Sec 0 of MSec 928
: The time is Sec 0 of MSec 928
: Start
: The time is Sec 0 of MSec 960
: The time is Sec 0 of MSec 960
:
: 위에 보시는거처럼 타이머 끝난 지점에서 772 가 다음 시작은 804인거 같습니다.
:
: 그럼 대략 32MSec에서 31MSec 까지 수준인거 같습니다.
: 인타발은 20인데 ㅜㅜ 그말은 외부 코드에 의해서 타이머가 조금씩 지연되는거 같습니다.
: 고곤 이해는 되는데 해결할 방법은 없을까요?
: 으흑.... 32MSec가 누적이 되서 그런거 같습니다.
: 20인타발을 49회 무시하고 50회 째에 작동하는데요
:
: 대략 32MSec에러값 * 50번 하니까 1.6초가 나오는군요
:
: 지금 1.6초 가량 지연되는걸로 보입니다.
:
:
: 20인타발로 쓰는이유는 프로그램에서 필요한 5가지 정도의 모드가 있습니다.
: 예를들면 저장모드,화면에 뿌리는모드,데이타 읽는 모드... 등등
: 모드별로 시간을 다르게 지정해 주기 위해서 하다보니 저런 코드가 만들어졌습니다.
: MOD를 50로 잡고
: 10에서 코드 하나 처리하고 빠져나오고
: 20에서 코드하다 처리하고 빠져 나오고 하는등등...
:
: 제가 좀 무리하게 짠 건가요...
:
: 마이컴 짜는 습관으로 짜다보니... 영 어렵군요 ㅎ
:
:
:
: 송신영 님이 쓰신 글 :
: : 코드에 문제가 있는겁니다.
: : 타이머가 정확한 것은 아니지만 인터벌을 1000msec로 설정시
: : 2초 정도에 한번 실행되고 하는 정도는 아닙니다.
: : 타이머 내부에서 먼가 딜레이를 많이 잡아먹고 있는 겁니다.
: : 타이머 함수 시작 부분에서 시간 찍고 마지막 부분에서 시간 찍어서
: : 차이가 얼마나 나는지 확인해보세요.
: :
: : 프로그램 초짜 님이 쓰신 글 :
: : : 안녕하세요 초짜 프로그래머 입니다.
: : :
: : : 기계와 통신하는 프로그램을 주로 다룹니다...
: : :
: : : State 라는 데에 현제 상태를 저장합니다...
: : :
: : : 그럼 GUI에서는 현제 상태를 저장합니다.
: : :
: : : 타이머를 이용해서...
: : :
: : : sprintf(TempStatedata, "상태는 %s, 시간은 %s, " State,TimeData.c_str());
: : :
: : : 요론 명령으로 출력합니다.
: : :
: : : 근데 타이머가 1000인데 시간이 정확히 1초 수준에서 저장이 안되는군요
: : :
: : : 뭐 가끔 틀려지는거라면 이해 되는데 ( 10초에 1초 정도 까지 괜찬을듯..)
: : :
: : : 근데 아에 틀어져서 2초 수준에서 1회 저장하는 수준이에요 ㅜㅜ
: : :
: : : 아마도 다른곳에서 잡고 있거나 할거 같은데..
: : :
: : : 이런건 스레드 말곤 답이 없나요? 아님 제가 잘못 한건가..
|