我正在测量两个事件之间的物理时间,如下所示:
#include <time.h>
#include <sys/time.h>
timeval wall_time0;
timeval wall_time1;
// start of period measurement
gettimeofday( &wall_time0 , 0);
...stuff happening
// end of period measurement
gettimeofday( &wall_time1 , 0);
return ( ( wall_time1.tv_sec - wall_time0.tv_sec ) + (( wall_time1.tv_usec - wall_time0.tv_usec )/(double)1000000) );
但是现在,我需要一种方法来测量线程实际使用的逻辑时间。也就是说,理论上应该是物理时间,减去运行其他线程和/或系统和内核逻辑所花费的时间。
我认为这是这样做的方法:
clock_t mTime0;
clock_t mTime1;
//start of period measurement
mTime0=clock();
... stuff happening
//end of period measurement
mTime1=clock();
return (mTime1-mTime0)/(double)CLOCKS_PER_SEC;
但是做了一些测量,我发现了两个问题:
1)对于某些测量,它大于物理时间,这是不对的(即:对于某些循环,物理时间将为 0.2495 .. 并且“逻辑”(使用 clock() 测量)将为 0.27,对于较小的测量它会只是四舍五入到零,这导致了第二个问题......)
2) 结果时间似乎比 gettimeofday 返回的时间粗多了
有没有更好的方法来测量 linux 中的本地线程时间?