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
[67389] Re:Re:Re:타이머 쓰는 방법 에 대한 질문입니다.
Intotheblue [makerjh] 1223 읽음    2012-05-31 12:47
타이머 인터발 관련 글은.. 여기 검색해 보시면 답이 나옵니다.
다음이는 질문전에 검색을 해보세요.

윈도우 타이머는 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회 저장하는 수준이에요 ㅜㅜ
: : :
: : : 아마도 다른곳에서 잡고 있거나 할거 같은데..
: : :
: : : 이런건 스레드 말곤 답이 없나요?  아님 제가 잘못 한건가..

+ -

관련 글 리스트
67367 타이머 쓰는 방법 에 대한 질문입니다. 프로그램 초짜 980 2012/05/30
67368     Re:타이머 쓰는 방법 에 대한 질문입니다. 송신영 998 2012/05/30
67385         Re:Re:타이머 쓰는 방법 에 대한 질문입니다. 프로그램 초짜 957 2012/05/31
67389             Re:Re:Re:타이머 쓰는 방법 에 대한 질문입니다. Intotheblue 1223 2012/05/31
67391                 Re:Re:Re:Re:타이머 쓰는 방법 에 대한 질문입니다. 프로그램 초짜 1219 2012/05/31
67395                     Re:Re:Re:Re:Re:타이머 쓰는 방법 에 대한 질문입니다. 송신영 1208 2012/05/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.