티스토리 뷰
마이크로초 단위 시간을 측정하여 비교하기 위해서 gettimeofday() 메소드를 사용합니다.
아래와 같이 측정할 수 있습니다.
struct timeval tp;
gettimeofday(&tp, NULL);
gettimeofday(&tp, NULL);
timeval구조체의 tv_sec에 해당 초의 값이, tv_usec에 해당 마이크로초가 들어갑니다.
그럼 이럴땐 어떻게 해야 할까요?
"123을 출력하고 0.5초뒤에 456을 출력하자"
쉽게 생각하면 timeval 구조체를 두개 정의한 뒤 시작 지점에서 시간 값을 측정하고,
루프를 돌면서 tv_usec을 비교하며 두 값의 차이가 500000이 되었을 때 루프를 나오면 될 것입니다.
코드는 아래와 같이 되겠죠
struct timeval tpstart, tpend;
printf("123\n");
gettimeofday(&tpstart, NULL);
while(1)
{
gettimeofday(&tpend, NULL);
if(tpend.tv_usec - tpstart.tv_usec > 500000)
break;
}
printf("456\n");
printf("123\n");
gettimeofday(&tpstart, NULL);
while(1)
{
gettimeofday(&tpend, NULL);
if(tpend.tv_usec - tpstart.tv_usec > 500000)
break;
}
printf("456\n");
그렇다면, 위와 같이 했을 때 코드가 정상동작 할까요?
그런 경우도 있을 것이고, 123 까지만 출력되고 456이 출력되지 않는 경우도 있을 것입니다.
왜 그럴까요?
왜냐면 tv_usec의 값은 tv_sec의 값이 증가되었을 때 0부터 다시 시작하기 때문이죠.
예를 들어, 1.9초에서 2.1초가 되었다면
아무리 비교해도 마이크로초 단위만으로는 500000의 차이가 날 수 없겠죠.
그래서 tv_usec의 크기에 따라 적절히 조건문을 이용하여 비교해야 정확한 결과를 가져올 수 있을 것입니다.
'기타 > 기타' 카테고리의 다른 글
[C] #if 매크로 활용 (0) | 2010.12.19 |
---|---|
[C#] Native API(Win32 API) 사용하기.(DllImport) (0) | 2010.11.27 |
[Tip/Error] expected declaration or statement at end of input 해결법 (0) | 2010.11.21 |
[Reversing] IA-32 CPU 레지스터 (0) | 2010.10.31 |
[Reversing] 리버스 엔지니어링을 위한 툴(Tool), 올리디버거(OllyDbg) (0) | 2010.10.30 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 카타르
- Discrete Mathematics
- Data Structure
- 머신러닝
- 운영체제
- android
- 기계학습
- 알고리즘
- Machine Learning
- 자료구조
- statistical learning
- 리버싱
- 개발
- 카타르 음주
- 데이터 사이언스
- operating systems
- reversing
- Reverse Engineering
- 대학원
- linux
- java
- 리눅스
- 이산수학
- 안드로이드
- 리버스엔지니어링
- Data Science
- 통계학습
- Algorithms
- 데이터 과학
- 자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함