C-以秒为单位计时我的程序,微秒精度为
我试图找出我所写的C程序的用户时间(在Linux机器上)。目前,我在代码开始时调用一次gettimeofday(),在代码结束时调用一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,如“1.000000”。但是,我的项目要求我的程序以秒为单位计时,精度为微秒,例如“1.234567”。如何找到该值?我知道gettimeofday()也在.tv_usec中记录微秒,但我不确定如何使用此值并正确设置其格式。使用C-以秒为单位计时我的程序,微秒精度为,c,time,C,Time,我试图找出我所写的C程序的用户时间(在Linux机器上)。目前,我在代码开始时调用一次gettimeofday(),在代码结束时调用一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,如“1.000000”。但是,我的项目要求我的程序以秒为单位计时,精度为微秒,例如“1.234567”。如何找到该值?我知道gettimeofday()也在.tv_usec中记录微秒,但我不确定如何使用此值并正确设置其格式。使用time
timersub
函数。它有三个参数:第一个是初始时间,第二个是最终时间,第三个是结果(差异)。这三个参数都是指向timeval
struct的指针。使用timersub
函数。它有三个参数:第一个是初始时间,第二个是最终时间,第三个是结果(差异)。所有这三个参数都是指向timeval
struct的指针。尝试将初始时间放入存储,然后在完成时从最终时间中减去该时间
storedValue = timer.tv_sec + 0.000001 * timer.tv_usec
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue
尝试将初始时间存入存储器,然后在完成后将其从最终时间中减去
storedValue = timer.tv_sec + 0.000001 * timer.tv_usec
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue
如果需要微秒:
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\u gettime(clock\u REALTIME,…)
并应用类似的转换如果您想要微秒:
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\u gettime(clock\u REALTIME,…)
并应用类似的转换只要不要忽略tv\u usec
-struct成员,但是将它们包括在计算中?如果您真的获得了该分辨率,这是特定于操作系统的。不要忽略tv\u usec
-struct成员,而是将它们包括在计算中?如果您真的获得了该分辨率,这是特定于操作系统的。