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
[45966] Re:Re:RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다.
열씸! [cappuccino] 3352 읽음    2006-08-02 04:22
윈도우 기본 타이머가 1/1000 초 주기인건 아닙니다.

Win95 ~ XP 까지 대개 최소타이밍이 다른데, 정확히 기억나진 않지만, XP의 경우 10ms 정도 (1/100초)
였던 것 같습니다.

DOS 는 1/18.2초 였고, 95 98정도도 비슷했던걸로 기억합니다.
2000 이, 1/50 이었나.

기억이 정확하지 않아 타이머 두개로 테스트를 해 봤습니다.
하나는 1ms 주기 하나는 1000ms 주기(1sec) 로 놓고, 1ms 타이머에선 int 형 카운터 변수를 1씩증가
1000ms 타이머에선 카운트 횟수를 출력하고 0으로 reset하게 말이죠.

평균 64회 카운트 됩니다. (1/64초) Windows XP(SP2)입니다.
즉, 15ms 정도 주파수 단위로 밖에 카운트가 안된다는거죠.

RDTSC 는 CPU 내부의 클럭 카운터입니다. (ReaD Time Stamp Counter 던가요)
3Ghz CPU 에선 1초에 3,000,000,000 회 카운트가 되죠.
대신에, 단지 세어주는 기능을 하는 녀석이라, 루프를 돌면서 Sleep 이라든지
적절한 흐름 제어가 필요한 것이죠.

답변을 올리신 분도 제대로 조사를 해 보셔야 할 것 같은데,
섣부른 답변이셨던듯 합니다.

다시 말씀드리지만, 단위가 1msec 라고 1msec 주기로 타이머 주파수가 발생하는건 아닙니다.
RDTSC 를 사용하는 방법은, 어셈블리나 인라인 어셈블리로 RDTSC 명령어를 날리거나
그 명령어를 지원하지 않는 경우는 emit 나 db 같은 instruction을 직접 보내주는 명령어로
명령어의 hex 값을 써 줘야 합니다. 구글에서 rdtsc 검색해 보시면 곳곳에 나올 것이구요.
인라인 어셈블리까지 동원할 만큼 최소의 클럭소모가 필요하지 않은 경우엔,
QueryPerformanceCounter API를 사용해서(내부적으로 RDTSC를 조사하는 함수로 알고 있습니다)
전원이 들어온 뒤, 현재까지의 클럭 카운트를 읽어(RDTSC)올 수 있습니다.

즉, 쓰레드를 하나 만드셔서, 적절히 RDTSC 하시면서 요구된 주파수에 이벤트 핸들러 함수를
콜백해 줄 수 있는 형태로 만드시면 되는 것이지요.

+ -

관련 글 리스트
45964 RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다. 빈라덴 1528 2006/08/02
45965     Re:RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다. 조준회 2079 2006/08/02
45966         Re:Re:RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다. 열씸! 3352 2006/08/02
45974             Re:Re:Re:RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다. 조준회 2809 2006/08/02
45975                 Re:Re:Re:Re:RDTSC 함수를 써서 프로그램 타이머를 할려고 합니다. 열씸! 1880 2006/08/02
45985                     열씸님 .. 날도 따듯한데..저랑 싸우고 싶으신겁니까?. 조준회 1562 2006/08/02
45988                         Re:열씸님 .. 날도 따듯한데..저랑 싸우고 싶으신겁니까?. 열씸! 2219 2006/08/02
46013                             오옷! 과열 현상! 웃고 넘어갑시다~ ^^ 박지훈.임프 1560 2006/08/04
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.