Я измеряю физическое время между двумя событиями так:
#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 .. и "логично" (измерено с помощью часов ()) будет 0,27, для меньших измерений это будет просто округлить до нуля, что приводит ко второй проблеме ...)
2) результирующее время кажется намного грубее, чем возвращаемое gettimeofday
Есть ли лучший способ измерить время локального потока в Linux?