Rit*_*ose 1 c time type-conversion
所以我在代码的开头得到时间,运行它,然后得到时间.
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;
Run Code Online (Sandbox Code Playgroud)
现在我想以"**代码运行0.007秒"或类似的形式打印出来.
所以有两个问题:
1)t似乎包含6000的订单值,我知道代码没有花6秒钟运行.
2)我怎样才能将t转换为double,因为它是unsigned int?或者是否有更简单的方式以我想要的方式打印输出?
Soa*_*Box 15
timeval 包含两个字段,秒部分和微秒部分.
tv_usec(u表示希腊字母mu,代表微)是微秒.因此当你得到6000时,那已经过了6000微秒.
tv_sec包含秒部分.
要获得所需的值,请使用以下代码:
double elapsed = (end.tv_sec - begin.tv_sec) +
((end.tv_usec - begin.tv_usec)/1000000.0);
Run Code Online (Sandbox Code Playgroud)
确保tv_sec在计算中包含零件. gettimeofday返回当前时间,因此当秒增加时,微秒将返回0,如果在代码运行时发生这种情况并且您没有tv_sec在计算中使用,则会得到负数.
1)那是因为usec不是6000毫秒,它是6000微秒(6毫秒或6千分之一秒).
2)试试这个:(double)t / 1000000将t转换为double,然后将其除以一百万来找到秒数而不是微秒数.
| 归档时间: |
|
| 查看次数: |
20843 次 |
| 最近记录: |