2011-06-30 15 views
2

特定の関数を実行するのにかかる時間を計算する必要があり、次のコード(source:http://snippets.dzone.com/posts/show/4254)に遭遇しました。 "... &レコードの実行時間マイクロコードの一部」Cでtimeval構造体に必要なヘルプ

/* Put this line at the top of the file: */ 
#include <sys/time.h> 

/* Put this right before the code you want to time: */ 
struct timeval timer_start, timer_end; 
gettimeofday(&timer_start, NULL); 

/* Put this right after the code you want to time: */ 
gettimeofday(&timer_end, NULL); 
double timer_spent = timer_end.tv_sec - timer_start.tv_sec + (timer_end.tv_usec - timer_start.tv_usec)/1000000.0; 
printf("Time spent: %.6f\n", timer_spent); 

が、コードの切れ端で私の個人的な経験では、出力の時刻が "秒の代りにマイクロ秒であることを示しています。私は正直か間違っているかについて何らかのインプットが必要です(私はこれを一度だけ明確にする必要があります)。

答えて

2

あなたは正しいです。

tv_secメンバーは秒を格納し、tv_usecメンバ(マイクロ秒)は10^6で秒に変換されます。

-1

このような修正:

double timer_spent = (timer_end.tv_sec - timer_start.tv_sec)*1e6 + (timer_end.tv_usec - timer_start.tv_usec); 
+0

いいえ、秒をマイクロ秒に変換するには、最初の部分に10^6を掛けなければなりません。 – sje397

+0

@ sje397確かに。修正しました。 –

1

これは、秒単位の時間差(以下の用語と:(timer_end.tv_usec - timer_start.tv_usec)マイクロ秒を提供します。だからあなたは大丈夫になるはずです。

+0

単位は秒です。 – sje397

+0

はい、あなたは正しいと思います。私はその質問を誤解したようです。 – Constantinius

関連する問題