cプログラムのクロック機能を使用して、現在のプログラムの実行時間を出力しています。出力に間違った時間が表示されます。時間を秒、ミリ秒、マイクロ秒で表示したいのですが。
#include <stdio.h>
#include <unistd.h>
#include <time.h>
int main()
{
clock_t start = clock();
sleep(3);
clock_t end = clock();
double time_taken = (double)(end - start)/CLOCKS_PER_SEC; // in seconds
printf("time program took %f seconds to execute \n", time_taken);
return 0;
}
time ./time
time program took 0.081000 seconds to execute
real 0m3.002s
user 0m0.000s
sys 0m0.002s
3秒程度の出力が期待できますが、表示が間違っています。ご覧のとおり、私は、Linuxのコマンドの時間を使って、このプログラムを実行する場合、私は正確な時刻を取得しています、私は私のCプログラムを使用して、同じ時間を表示したいです。
一般に信じられていることとは異なり、このclock()
関数は経過クロック時間ではなくCPU時間を取得します。これは、名前が紛らわしいことに人々に信じさせる可能性があるためです。
C標準の言語は次のとおりです。
7.27.2.1
clock
機能あらすじ
#include <time.h> clock_t clock(void);
説明
この
clock
関数は、使用されるプロセッサ時間を決定します。戻り値
この
clock
関数は、プログラムの呼び出しにのみ関連する実装定義の時代の始まり以来、プログラムによって使用されたプロセッサ時間に対する実装の最良の近似値を返します。秒単位の時間を決定するには、clock関数によって返される値をマクロの値で除算する必要がありますCLOCKS_PER_SEC
。使用されているプロセッサ時間が利用できない場合、関数は値を返します(clock_t)(−1)
。値を表すことができない場合、関数は不特定の値を返します。
経過時間を取得するには、次のいずれかを使用する必要があります。
time()
1秒の分解能で機能timespec_get()
より正確かもしれないが、すべてのシステムで利用できない場合があります機能gettimeofday()
Linuxシステムで利用可能なシステムコールclock_gettime()
機能。UNIXのwall-clock-time、user-cpu-time、およびsystem-cpu-timeとは具体的に何ですか?を参照してください。このテーマの詳細については。
これは、以下を使用した修正バージョンgettimeoday()
です。
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
int main() {
struct timeval start, end;
gettimeofday(&start, NULL);
sleep(3);
gettimeofday(&end, NULL);
double time_taken = end.tv_sec + end.tv_usec / 1e6 -
start.tv_sec - start.tv_usec / 1e6; // in seconds
printf("time program took %f seconds to execute\n", time_taken);
return 0;
}
出力:
時間プログラムの実行には3.051333秒かかりました
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加