2012-04-25 22 views
-1

プログラムの実行時間を知りたいと思っていましたが、ファイルの入出力に必要な時間も除外したかったのです。この目的のために、私はtime()関数を使用しました。 .h.cppのファイルがたくさんありますが、時間オブジェクトが参照される唯一の場所です。実行時間を秒単位で正確に測定する

私の問題は、startの値が最初に正しく設定されているのに、初めてdosomethingelse()が呼び出されたときに値がゼロに設定されていることです。これにより、endstartの差(ゼロ)が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); 
    } 
} 
+1

いくつかのprintf()文を入れたり、デバッガでトレースして、最初に予期せぬ値があった場所を調べてみましたか? –

+0

@TonyDelroy:はい私はそれをトレースしました。 ** dosmethingelse()**への最初の関数呼び出しで値が失われます。この関数の最初の行で、startは値を失いました。 – John

+0

あなたは同じスタート変数を見ていないように思えます。おそらく、 'main()'の中にあるstartのアドレスを出力します( 'printf(" startは@%p \ n "、&start)'にあります)。もう一度dosth.cppの中で比較することができます。もっと一般的には、 'void start();というヘッダを持つtiming.h/.cのペアを1つ持つ方が良いでしょう。 int elapsed_second_and_reset(); 'およびすべての' time_t'変数は 'timing.c'専用です。 –

答えて

0

は問題はstartですおよびendはグローバルです... dosomethingelse()の中にそれらを設定すると、プログラム全体に対してstartを再設定しています。

ローカルタイマーをdosomethingelse()の範囲内に保ち、その機能で費やされた時間を合計から差し引くことです。

0

«スタート»は«main»と«dosomethingelse»機能に変更されています。 なぜそれをしましたか?

関連する問題