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
[67391] Re:Re:Re:Re:타이머 쓰는 방법 에 대한 질문입니다.
프로그램 초짜 [] 1219 읽음    2012-05-31 13:01
답변 감사합니다. 검색을 생활화 하겟습니다.

1ms 정도의 미세오차를 보고 싶은게 아니구요

단순히 1초에 한번씩 뿌리고 싶은건데요...

현제 시간이 2시 10분 50초
현제 시간이 2시 10분 51초
현제 시간이 2시 10분 52초
현제 시간이 2시 10분 53초
현제 시간이 2시 10분 54초
현제 시간이 2시 10분 55초

위에처럼 나오는게 목적인데 지금은

현제 시간이 2시 10분 50초
현제 시간이 2시 10분 51초
현제 시간이 2시 10분 52초
-
현제 시간이 2시 10분 54초
현제 시간이 2시 10분 55초
현제 시간이 2시 10분 56초
-
현제 시간이 2시 10분 58초

저기 띄운 부분이 2초의 텀을 가진다는거죠... ㅎㅎ

그게 문제인거에요 ㅜㅜ


Intotheblue 님이 쓰신 글 :
: 타이머 인터발 관련 글은.. 여기 검색해 보시면 답이 나옵니다.
: 다음이는 질문전에 검색을 해보세요.
:
: 윈도우 타이머는 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 1224 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.