如何使用gettimeofday()来运行我的程序的时间

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在计算中使用,则会得到负数.


Mic*_*ens 6

1)那是因为usec不是6000毫秒,它是6000微秒(6毫秒或6千分之一秒).

2)试试这个:(double)t / 1000000将t转换为double,然后将其除以一百万来找到秒数而不是微秒数.