2016-02-02 45 views
1

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

+0

根本就不能忽视'tv_usec'-结构成员,但其中包括在计算? – Ctx

+0

如果您真的获得该分辨率,这是特定于操作系统的。 – Olaf

回答

0

使用timersub功能。它有三个参数:第一个是初始时间,第二个是最后一个,第三个是结果(差异)。所有这三个参数都是指向timeval结构的指针。

0

尝试把初始时间入库然后减去从最后的时候,你就完成了。

storedValue = timer.tv_sec + 0.000001 * timer.tv_usec 
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue 
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,...)和应用类似的转换