我试图找出我写过的C程序的用户时间(在Linux机器上)。目前我在我的代码开头和最后一次调用gettimeofday()一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,例如" 1.000000"。但是,我的项目要求我的程序在几秒钟内以微秒精度计时,例如" 1.234567"。我怎样才能找到这个值?我知道gettimeofday()也会在.tv_usec中记录微秒,但我不确定如何使用这个值并正确格式化。
答案 0 :(得分:0)
使用timersub
功能。它需要三个参数:第一个是初始时间,第二个是最后一个,第三个是结果(差异)。所有这三个参数都是指向timeval
struct。
答案 1 :(得分:0)
尝试将初始时间存入存储,然后在完成后从最后一次减去。
storedValue = timer.tv_sec + 0.000001 * timer.tv_usec
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue
答案 2 :(得分:0)
如果你想要微秒:
long long usec;
usec = tv.tv_sec;
usec *= 1000000;
usec += tv.tv_usec;
如果你想要小数秒[浮点]:
double asec;
asec = tv.tv_usec;
asec /= 1e6;
asec += tv.tv_sec;
以下是一些完整的功能:
// tvsec -- get current time in absolute microseconds
long long
tvsec(void)
{
struct timeval tv;
long long usec;
gettimeofday(&tv,NULL);
usec = tv.tv_sec;
usec *= 1000000;
usec += tv.tv_usec;
return usec;
}
// tvsecf -- get current time in fractional seconds
double
tvsecf(void)
{
struct timeval tv;
double asec;
gettimeofday(&tv,NULL);
asec = tv.tv_usec;
asec /= 1e6;
asec += tv.tv_sec;
return asec;
}
注意:如果您想要更高的准确度(例如纳秒),可以使用clock_gettime(CLOCK_REALTIME,...)
并应用类似的转化