C中某个函数所花费的测量时间总为0.000000

时间:2019-03-28 07:29:49

标签: c

我读了一篇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; 
} 

3 个答案:

答案 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>