C-以秒为单位计时我的程序,微秒精度为

C-以秒为单位计时我的程序,微秒精度为,c,time,C,Time,我试图找出我所写的C程序的用户时间(在Linux机器上)。目前,我在代码开始时调用一次gettimeofday(),在代码结束时调用一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,如“1.000000”。但是,我的项目要求我的程序以秒为单位计时,精度为微秒,例如“1.234567”。如何找到该值?我知道gettimeofday()也在.tv_usec中记录微秒,但我不确定如何使用此值并正确设置其格式。使用time

我试图找出我所写的C程序的用户时间(在Linux机器上)。目前,我在代码开始时调用一次gettimeofday(),在代码结束时调用一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,如“1.000000”。但是,我的项目要求我的程序以秒为单位计时,精度为微秒,例如“1.234567”。如何找到该值?我知道gettimeofday()也在.tv_usec中记录微秒,但我不确定如何使用此值并正确设置其格式。

使用
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成员,而是将它们包括在计算中?如果您真的获得了该分辨率,这是特定于操作系统的。