我读了一篇geeksforgeeks形式的文章。该代码显示了一个用来测量时间函数成本的函数。
在我的机器上,无论我按回车多长时间,我总是得到0.000000。
我打印t = clock()-t; t始终等于0.00000,我将语句重写为此,仍为0.000000。
clock_t m;
m = clock() - t;
centos7中的gcc版本
[root@localhost log]# gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
/* Program to demonstrate time taken by function fun() */
#include <stdio.h>
#include <time.h>
// A function that terminates when enter key is pressed
void fun()
{
printf("fun() starts \n");
printf("Press enter to stop fun \n");
while(1)
{
if (getchar())
break;
}
printf("fun() ends \n");
}
// The main program calls fun() and measures time taken by fun()
int main()
{
// Calculate the time taken by fun()
clock_t t;
t = clock();
fun();
t = clock() - t;
double time_taken = ((double)t)/CLOCKS_PER_SEC; // in seconds
printf("fun() took %f seconds to execute \n", time_taken);
return 0;
}
答案 0 :(得分:0)
您好,尝试以下方法:
unsigned int t=time(0);
fun();
unsigned int result=time(0)-t; // result is the time taken by fun
答案 1 :(得分:0)
如果您要测量“已用CPU时间”(而不是“等待用户按下按键所花费的墙上时钟时间”),则...
想象一下,如果操作系统具有一个每秒生成10次IRQ的计时器,并且IRQ处理程序仅执行ticks++
; clock()
就是return ticks;
。在这种情况下,CLOCKS_PER_SEC
将为10。
现在,如果您在定时器IRQ发生之前立即调用clock()
,并且在定时器IRQ发生之后立即再次调用clock()
,则返回的值之间的差可能为1(等于100 ms),甚至相隔更少的时间调用clock()
。
或者;如果您在计时器IRQ发生后立即调用clock()
,而在计时器IRQ发生前再次调用clock()
,则返回的值之间的差可能为0,甚至在两次调用1/CLOCKS_PER_SEC
之间传递的时间也更多。 / p>
本质上,1/CLOCKS_PER_SEC
返回的值之间的差异是“比您想像的要早CLOCKS_PER_SEC
”和“比您想像的要长CLOCKS_PER_SEC
。”
请注意,public function total_late()
{
$retRes=$this->modelname->total_late($ID_number);
}
的值是实现定义的。 public function total_late($ID_number)
{
$query = "SELECT sum(late_deduction) as late_deduction
FROM tbl_dtr WHERE ID_number = '$ID_number'";
$result = $this->db->query($query);
return $result->row()->late_deduction;
}
可以是各种东西,可以低至10,高至40亿。
答案 2 :(得分:0)
clock()
测量CPU时间,即处理器处于活动状态的时间。您可能需要测量挂钟时间,这是从函数运行的开始到结束的秒数:
struct timeval start;
gettimeofday(&start, 0);
fun();
struct timeval end;
gettimeofday(&end, 0);
double time_taken = (end.tv_sec - start.tv_sec)
+ (end.tv_usec - start.tv_usec)*1e-6;
要执行此操作,还必须包括<sys/time.h>