유닉스에서 마이크로 단위의 시간을 재는 법...

#include <iostream>
#include <time.h>
using namespace std;

timespec 
diff
(timespec start, timespec end) { timespec temp; if ((end.tv_nsec-start.tv_nsec)<0) { temp.tv_sec = end.tv_sec-start.tv_sec-1; temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; } else { temp.tv_sec = end.tv_sec-start.tv_sec; temp.tv_nsec = end.tv_nsec-start.tv_nsec; } return temp; }
int 
main
( void ) { timespec time1, time2; int temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1); for (int i = 0; i< 242000000; i++) temp+=temp; clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2); cout<<diff(time1,time2).tv_sec<<":"<<diff(time1,time2).tv_nsec<<endl; return 0; }   timespec diff(timespec start, timespec end) { timespec temp; if ((end.tv_nsec-start.tv_nsec)<0) { temp.tv_sec = end.tv_sec-start.tv_sec-1; temp.tv_nsec = 1000000000+end.tv_nsec-start.tv_nsec; } else { temp.tv_sec = end.tv_sec-start.tv_sec; temp.tv_nsec = end.tv_nsec-start.tv_nsec; } return temp; }
 
자료출처 : 
http://www.guyrutenberg.com/2007/09/22/profiling-code-using-clock_gettime/
 



리눅스에서 나노초 단위의 시간 재기.

#include <time.h> 
/* 
struct timespec { 
time_t tv_sec; // seconds 
long tv_nsec; // nanoseconds 
}; 
*/ 

/*
CLOCK_REALTIME
System-wide realtime clock. Setting this clock requires appropriate privileges.
CLOCK_MONOTONIC
Clock that cannot be set and represents monotonic time since some unspecified starting point.
CLOCK_PROCESS_CPUTIME_ID
High-resolution per-process timer from the CPU.
CLOCK_THREAD_CPUTIME_ID
Thread-specific CPU-time clock.
*/

int
main( void )
 
{ 
struct timespec tp; 
int rs; 

rs = clock_gettime(CLOCK_REALTIME, &tp); 
printf("%ld %ld\n", tp.tv_sec, tp.tv_nsec); 
rs = clock_gettime(CLOCK_REALTIME, &tp); 
printf("%ld %ld\n", tp.tv_sec, tp.tv_nsec); 
return 0; 
} 

$ gcc -o test test.c -lrt  

ㅇㅇ


위에서 쓴 두 가지 방법 모두 신뢰성이 떨어진다는 것은 염두에 두고 써야함.
 

'프로그래밍 일반' 카테고리의 다른 글

데니스 리치에게 명복을...  (0) 2011.10.24
tcp state diagram  (0) 2011.10.20
Posted by blade.
,