【发布时间】:2012-04-25 12:35:26
【问题描述】:
我想知道一个程序的执行时间,但我也想排除文件输入/输出所需的时间。为此,我使用了time() 函数。有很多 .h 和 .cpp 文件,但这里是唯一引用时间对象的地方。
我的问题是,虽然 start 的值在开始时设置正确,但在第一次调用 dosomethingelse() 时它会丢失它(设置为零)。这使得 sub_duration 具有非常大的价值,因为现在 end 和 start 之间的差异为零,是 end 的值。
这是我的使用方法:
main.cpp
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;
}
dosth.h
extern time_t start;
extern time_t end;
extern time_t sub_duration;
extern time_t total_duration;
dosomethingelse();
dosth.cpp
#include"dosth.h"
dosomethingelse()
{
if(somecondition)
{
end = time(NULL);
sub_duration = difftime(end,start);
total_duration += sub_duration;
writesomethingTofile();
start = time(NULL);
}
}
【问题讨论】:
-
您是否尝试放入一些 printf() 语句,或者在调试器中进行跟踪,以查看您第一次得到意外值的位置?
-
@TonyDelroy:是的,我已经追踪到了。它在第一次调用 dosmethingelse() 的函数时失去它的价值。在这个函数的第一行 start 已经失去了它的价值。
-
听起来你没有看到相同的起始变量......也许在
main()(即printf("start is at @%p\n", &start))和dosth.cpp中再次打印出起始地址,以便您可以比较.更一般地说,最好有一对timing.h/.c 与提供void start(); int elapsed_second_and_reset();和所有time_t变量私有到timing.c的标头。