困っていること
clock() / CLOCKS_PER_SECでCPUの経過時間を計測したいのですが、clock()の挙動がうまく把握できません。clock() / CLOCKS_PER_SECでCPU経過時間の秒数を計測できるはずですが、ストップウォッチで測る時間と大きくことなります。
2番目の該当コードの場合はうまくいくのですが一番目の該当コードの場合うまく機能しません。その理由がなんなのかが知りたいです。
該当のソースコード
1
1#include <stdio.h> 2#include <time.h> 3 4int main(void) 5{ 6 int i; 7 clock_t cpu_time; 8 double sec; 9 10 /* 負荷を掛ける処理(適当です) */ 11 for (i = 0; i < 1000000; i++) 12 { 13 printf("\r計測中..."); 14 } 15 16 /* CPU時間をチェック */ 17 cpu_time = clock(); 18 19 /* 秒に直す */ 20 sec = (double)cpu_time / CLOCKS_PER_SEC; 21 22 printf("%f秒\n", sec); 23 24 return 0; 25} 26
2
1#include <stdio.h> 2#include <time.h> 3#include <stdlib.h> 4 5#define MAX_STAGE 10 6 7int sleep(unsigned long x) 8{ 9 clock_t c1 = clock(), c2; 10 11 do 12 { 13 if ((c2 = clock()) == (clock_t)-1) //エラー検出 14 { 15 return 0; 16 } 17 18 } while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x); 19 return 1; 20} 21 22int main(void) 23{ 24 sleep(1000); 25 printf("1秒後"); 26 27 return 0; 28} 29
実行結果
1
1//ストップウォッチで計測した場合2~3秒程度でした 2計測中...0.263727秒
2
1//1秒後に表示される 21秒後 3
###OS
MacOS Monterey ver12.1です
[C言語:clock関数を使ってある処理にかかった時間を計測する](https://dianxnao.com/c%E8%A8%80%E8%AA%9E%EF%BC%9Aclock%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%82%E3%82%8B%E5%87%A6%E7%90%86%E3%81%AB%E3%81%8B%E3%81%8B%E3%81%A3%E3%81%9F%E6%99%82%E9%96%93%E3%82%92/ ) とかでしょうか?
「あくまでCPU時間のため、精度がミリ秒まであるとまでは言えませんが、手元のストップウォッチと計測を比べるとほぼ一致していました。」記載されているのですが、10倍違う結果になってしまいます。
なぜ挙動が違うも何も、提示の1と2は完全に別モノのコードですが、、
回答3件
あなたの回答
tips
プレビュー