所以我得到了代码开头的时间,运行它,然后得到时间。
struct timeval begin, end;
gettimeofday(&begin, NULL);
//code to time
gettimeofday(&end, NULL);
//get the total number of ms that the code took:
unsigned int t = end.tv_usec - begin.tv_usec;现在我想以“**代码需要0.007秒才能运行”或类似的形式打印出来。
所以有两个问题:
1) t似乎包含一个6000阶的值,我知道代码不需要6秒就能运行。
2)如何将t转换为双精度型,因为它是一个无符号整型?或者,有没有一种更简单的方法来打印我想要的输出?
发布于 2010-01-24 07:39:20
1)这是因为usec不是6000毫秒,而是6000微秒(6毫秒或6千分之一秒)。
2)尝试这样:将t转换为双精度值的(double)t / 1000000,然后将其除以一百万,得到秒数而不是微秒数。
发布于 2010-01-24 07:41:21
timeval包含两个字段,秒部分和微秒部分。
微秒(u表示希腊语字母u,代表tv_usec )是微秒。因此,当你得到6000,那就是6000微秒。tv_sec包含秒部分。
要获得想要作为双精度值的值,请使用以下代码:
double elapsed = (end.tv_sec - begin.tv_sec) +
((end.tv_usec - begin.tv_usec)/1000000.0);请确保在计算中包括tv_sec部件。gettimeofday返回当前时间,所以当秒数递增时,微秒将回到0,如果在代码运行时发生这种情况,并且您在计算中没有使用tv_sec,那么您将得到一个负数。
https://stackoverflow.com/questions/2125219
复制相似问题