c言語 時間 ミリ秒

1秒以下の時間の測定に、c言語の本に書いてあった

#include <time.h>
clock_t start_time;
(double)(clock() - start_time)/CLOCKS_PER_SEC

という方法で測定してたけど、なぜか値が変化しない時がある。 sleepを途中で入れても、変化しない時もある。

かといって、difftimeだと、1秒以下の精度返してくれない。。。

そういう時はgettimeofdayを使うことを教わった。(POSIX )

[C]プログラムの実行時間  gettimeofday - 情報系女子大生の一歩先へ http://d.hatena.ne.jp/to-haku/20090523

こちらのコードがそのまま使える

	#include <sys/time.h>
	#include <stdio.h>
	double gettimeofday_sec(){
		struct timeval t;
		gettimeofday(&t, NULL);
		return (double)t.tv_sec + (double)t.tv_usec * 1e-6;
	}
	   
	int main(){
		double tstart, tend;
		tstart = gettimeofday_sec();	//開始時間取得
	  
		/*処理*/
	  sleep(1);
		tend = gettimeofday_sec();		//終了時間取得
		printf("%10.20f",tend - tstart);        //処理時間表示
	}

追記

こういうことか!

C言語-時間の計測 http://www.mm2d.net/c/c-02.shtml

	2002/12/01追記:最近気づいたんですが, clock() で求まる時間と,time(time_t *) で求まる時間とは厳密には異なります.
	clock() で求まる時間はそのプロセスが消費したプロセッサ時間になります.一方,time(time_t *) で求まる時間は歴時間です.
	つまり,clock() で求めた時間は実時間とは異なります.(そのプロセスが実行されている間,プロセッサリソースのほぼ100%を占有している場合は,ほぼ実時間になります) 
	time(time_t *) は精度は低いですがプロセスの切り替えに影響されず実時間を取得できます. 

参考

C言語/日時 - BugbearR's Wiki http://www.bugbearr.jp/?C%E8%A8%80%E8%AA%9E%2F%E6%97%A5%E6%99%82

UNIXの部屋 コマンド検索:sleep (*BSD/Linux) http://x68000.q-e-d.net/~68user/unix/pickup?sleep

Manpage of GETTIMEOFDAY http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/gettimeofday.2.html

[C]プログラムの実行時間  gettimeofday - 情報系女子大生の一歩先へ http://d.hatena.ne.jp/to-haku/20090523


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-09-13 (火) 10:08:39 (2776d)