-1

我想知道一个程序的执行时间,但我也想排除文件输入/输出所需的时间。为此,我使用了该time()功能。有很多文件.h.cpp但这里是唯一引用时间对象的地方。

dosomethingelse()我的问题是,虽然 start 的值在开始时设置正确,但在第一次调用时它会丢失它(设置为零) 。这使得有一个非常大的值,因为现在和sub_duration之间的差异为零,是 的值。endstartend

这是我使用它的方式:

主文件

time_t start=0;
time_t end=0;
time_t sub_duration=0;
time_t total_duration=0; 

int main()
{
    start = time(NULL);
    while(somethingtodo)
    {
        dosomething();
        dosomethingelse();
    }
    end = time(NULL);
    sub_duration = difftime(end,start);
    total_duration += sub_duration;
}

多思.h

   extern      time_t start;
   extern      time_t end;
   extern      time_t sub_duration;
   extern      time_t total_duration;
   dosomethingelse();

多思.cpp

#include"dosth.h"    
dosomethingelse()
{
    if(somecondition)
    {
        end = time(NULL);
        sub_duration = difftime(end,start);
        total_duration += sub_duration;
        writesomethingTofile();
        start = time(NULL);
    }
}
4

2 回答 2

0

问题是start并且end是全局的......当你将它们设置在里面时,你正在为整个程序dosomethingelse()重新设置。start

解决方案是在内部保留一个本地计时器dosomethingelse(),并从总数中减去在该函数中花费的时间。

于 2012-04-25T12:52:34.183 回答
0

« start » 变成 « main » 和 « dosomethingelse » 函数。你为什么这么做 ?

于 2012-04-25T13:40:31.983 回答