c言語、clock関数について質問です。 clockで入力までの経過時間を算出したいのですが、何秒待っても0,000067や0.000047等、遥かに少ない数値(と言うか0,000040~0,000080の間くらい)しか返って来ません。

c言語、clock関数について質問です。 clockで入力までの経過時間を算出したいのですが、何秒待っても0,000067や0.000047等、遥かに少ない数値(と言うか0,000040~0,000080の間くらい)しか返って来ません。 プログラムに間違いがあるのか、環境が悪いのか… ちゃんと経過時間を算出させるにはどうしたら良いでしょうか。 わかる方がいましたら教えて下さい。 XcodeのCommand Line Toolを使用しています。 /*プログラム*/ #include <stdio.h> #include <time.h> int main() { int i = 0; clock_t start, end; double jikan; start = clock(); scanf("%d",&i); end = clock(); jikan = (double)(end-start) / CLOCKS_PER_SEC; printf("%lf秒", jikan); return 0; } 【環境】MacOS X 10.6.6 【エディタ】Xcode3.25 【CPU】3.06 GHz Intel Core 2 Duo 【メモリ】4G

iOS開発1,649閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

0

clock()で計測できるのは、CPU処理時間なのでこのプログラムのscanf関数での入力待ち時間が含まれず、そのような小さな値になるのでしょうね。 xcodeならばgettimeofday()関数があるはずなので、これを用いればI/Oを含めた処理時間を計測することができます。

ThanksImg質問者からのお礼コメント

ありがとうございます! gettimeofday関数を使用したら上手くいきました。 このプログラムではclockは良くなかったみたいですね。 助かりました、他に回答してくれた方もありがとうございました。

お礼日時:2011/2/7 2:18

その他の回答(1件)

0

> プログラムに間違いがあるのか、環境が悪いのか… 実行結果は正しそうに見えました。 取得しているのはCPUクロック数なので、scanfでIO待ちの時間は含まれないのが正しいです。 > ちゃんと経過時間を算出させる 経過時間を得たい場合には時刻取得関数使ってscanf前後の時刻を取得し差を求めれば良いかと思います。 ※ gcc timesource.c -lrt #include <stdio.h> #include <stdlib.h> #include <time.h> int main( void ) { struct timespec start, end, diff; clock_gettime(CLOCK_REALTIME, &start); scanf("%d",&i); clock_gettime(CLOCK_REALTIME, &end); diff.tv_sec=end.tv_sec-start.tv_sec; if( end.tv_nsec < start.tv_nsec ) { -- diff.tv_sec; diff.tv_nsec = 1000000000; diff.tv_nsec -= start.tv_nsec; diff.tv_nsec += end.tv_nsec; } else diff.tv_nsec = end.tv_nsec - start.tv_nsec; printf("%d.%09d sec\n", diff.tv_sec, diff.tv_nsec); return 0; } マイクロ秒単位で取得する場合にはgettimeofday使えば良いかと思います。 ナノ秒単位だとclock_gettime使えば良いかと。 最近のパソコンで軽い処理の時間計測すると1ナノ秒未満の計測結果が普通にでるのでもっと小さな単位が欲しくなる事もありそうですが。