-1

プログラムの実行時間を知りたかったのですが、ファイルの入出力に必要な時間も除外したかったのです。この目的のために、time()関数を使用しました。多く.h.cppファイルがありますが、時間オブジェクトが参照される場所はここだけです。

私の問題は、 start の値が最初に正しく設定されているのにdosomethingelse()、初めて呼び出されたときに失われる (ゼロに設定される) ことです。これにより、とsub_durationの差(ゼロ) が の値になるため、 は非常に大きな値になります。endstartend

これが私がそれをどのように使用したかです:

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;
}

doth.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);
    }
}
4

2 に答える 2

0

«start»は«main»および«dosomethingelse»関数に変更されます。どうしてそんなことをしました ?

于 2012-04-25T13:40:31.983 に答える
0

問題は、startendがグローバルであることです... 内でそれらを設定すると、プログラム全体dosomethingelse()の が再設定されます。start

解決策は、内部dosomethingelse()にローカル タイマーを保持し、その関数で費やされた時間を合計から差し引くことです。

于 2012-04-25T12:52:34.183 に答える