プログラムの実行時間を知りたいと思っていましたが、ファイルの入出力に必要な時間も除外したかったのです。この目的のために、私はtime()
関数を使用しました。 .h
と.cpp
のファイルがたくさんありますが、時間オブジェクトが参照される唯一の場所です。実行時間を秒単位で正確に測定する
私の問題は、startの値が最初に正しく設定されているのに、初めてdosomethingelse()
が呼び出されたときに値がゼロに設定されていることです。これにより、end
とstart
の差(ゼロ)がend
の値になるため、sub_duration
は非常に大きな値になります。ここで
は、私はそれを使用する方法である:
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は値を失いました。 – John
あなたは同じスタート変数を見ていないように思えます。おそらく、 'main()'の中にあるstartのアドレスを出力します( 'printf(" startは@%p \ n "、&start)'にあります)。もう一度dosth.cppの中で比較することができます。もっと一般的には、 'void start();というヘッダを持つtiming.h/.cのペアを1つ持つ方が良いでしょう。 int elapsed_second_and_reset(); 'およびすべての' time_t'変数は 'timing.c'専用です。 –