C - 在

时间:2016-02-02 22:36:08

标签: c time

我试图找出我写过的C程序的用户时间(在Linux机器上)。目前我在我的代码开头和最后一次调用gettimeofday()一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,例如" 1.000000"。但是,我的项目要求我的程序在几秒钟内以微秒精度计时,例如" 1.234567"。我怎样才能找到这个值?我知道gettimeofday()也会在.tv_usec中记录微秒,但我不确定如何使用这个值并正确格式化。

3 个答案:

答案 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,...)并应用类似的转化