int main (int argc, const char * argv[]) {
clock_t time1, time2;
time1 = clock();
//time1 = gettimeofday();
add();
time2 = clock();
//time2= gettimeofday();
float time = ((float)time2 - (float)time1) / 1000000.0F;
printf("%fsn", time);
return 0;
}
我最终从中得到了类似 0.288640991s 的东西(不确定上面的当前代码是否向右有那么多数字。但我期待这条线的几秒钟:
float time = ((float)time2 - (float)time1) / 1000000.0F;
当我除以 10000.0F 时,我得到 28 秒的实时时间,这就是实际情况。那么为什么上面的行不这样做呢?
编辑:我正在使用Mac,我听说有问题。
首先,你应该使用CLOCKS_PER_SEC
而不是一些幻数。
无论如何,如果您在POSIX系统中,CLOCKS_PER_SEC
在POSIX中被定义为一百万(与您正在使用的值相同(,因此这可能不是您的问题。
您必须知道,clock
只测量处理器运行您的用户空间程序的时间,而不是在内核或其他进程中花费的时间。这很重要,因为如果您调用系统调用或调用系统调用的函数,或者您的进程被内核抢占,则clock
结果对您来说可能是错误的。
例如,请参阅以下内容:
time_t time1, time2;
time1 = clock();
sleep(5);
time2 = clock();
sleep
调用之前和之后clock
返回值的差值(用CLOCKS_PER_SEC
正确规范化(很可能为 0 秒。
如果要测量函数或代码块执行期间经过的时间,最好使用函数gettimeofday
。
clock()
返回自程序启动以来经过的时钟周期数。
为了将其转换为秒,您必须除以 CLOCKS_PER_SEC
,而不是 1000000.0F
.
无耻的自我推销:
或者,您可以使用我的秒表.h和秒表.c来测量经过的时间。