C语言中的函数clock()
在研究time.h中的clock()函数时,我问自己这样一个问题:制作一个简单的程序,看看它是如何工作的。运行这个程序时,我很惊讶,结果显示为0,而我预期的结果是2。我错在哪里C语言中的函数clock(),c,unix,system-calls,time.h,C,Unix,System Calls,Time.h,在研究time.h中的clock()函数时,我问自己这样一个问题:制作一个简单的程序,看看它是如何工作的。运行这个程序时,我很惊讶,结果显示为0,而我预期的结果是2。我错在哪里 int main(int argc, char const *argv[]){ int msec = 0; clock_t before = clock(); sleep(2); clock_t difference = clock() - before; msec = difference * 10
int main(int argc, char const *argv[]){
int msec = 0;
clock_t before = clock();
sleep(2);
clock_t difference = clock() - before;
msec = difference * 1000 / CLOCKS_PER_SEC;
printf("Time taken %d seconds\n",msec/1000);
}
时钟
测量程序使用的处理器时间。程序睡眠时不使用处理器时间。程序的其余部分使用的时间不到一毫秒
要测量“挂钟”或“真实世界”时间,请使用time
,并使用difftime
将time
返回的类型减去time
值:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
time_t before = time(NULL);
sleep(2);
double difference = difftime(time(NULL), before);
printf("The time taken was %g seconds.\n", difference);
}
#包括
#包括
#包括
int main(int argc,const char*argv[]
{
time\u t before=时间(空);
睡眠(2);
双差=difftime(时间(空),之前);
printf(“所用时间为%g秒。\n”,差异);
}
时钟
测量程序使用的处理器时间。程序睡眠时不使用处理器时间。程序的其余部分使用的时间不到一毫秒
要测量“挂钟”或“真实世界”时间,请使用time
,并使用difftime
将time
返回的类型减去time
值:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
time_t before = time(NULL);
sleep(2);
double difference = difftime(time(NULL), before);
printf("The time taken was %g seconds.\n", difference);
}
#包括
#包括
#包括
int main(int argc,const char*argv[]
{
time\u t before=时间(空);
睡眠(2);
双差=difftime(时间(空),之前);
printf(“所用时间为%g秒。\n”,差异);
}
我建议双毫秒=差*1000.0/秒时钟
并打印一个double
。From:“如果使用的处理器时间不可用或其值无法表示,函数将返回值(clock_t)-1。”这可能是在两个clock()
调用中发生的情况,因此您有-1-(-1)=0
?@WeatherVane此顺序是否优于先除后乘?我在某个地方读到过,如果双倍距离0..abs(1)
range.@yvw当我使用MS函数Sleep(2000)
运行时,它报告1
,但当使用double
时,它报告1.999999
。另外,clock()
的MS实现是不一致的,因为它测量墙时间。@WeatherVane,如您所说。这里的计算顺序有区别吗?我建议double msec=difference*1000.0/时钟/秒
并打印一个double
。From:“如果使用的处理器时间不可用或其值无法表示,函数将返回值(clock_t)-1。”这可能是在两个clock()
调用中发生的情况,因此您有-1-(-1)=0
?@WeatherVane此顺序是否优于先除后乘?我在某个地方读到过,如果双倍距离0..abs(1)
range.@yvw当我使用MS函数Sleep(2000)
运行时,它报告1
,但当使用double
时,它报告1.999999
。另外,clock()
的MS实现是不一致的,因为它测量墙时间。@WeatherVane,如您所说。这里的计算顺序有区别吗?