困っていること
clock() / CLOCKS_PER_SECでCPUの経過時間を計測したいのですが、clock()の挙動がうまく把握できません。clock() / CLOCKS_PER_SECでCPU経過時間の秒数を計測できるはずですが、ストップウォッチで測る時間と大きくことなります。
2番目の該当コードの場合はうまくいくのですが一番目の該当コードの場合うまく機能しません。その理由がなんなのかが知りたいです。
該当のソースコード
1
#include <stdio.h> #include <time.h> int main(void) { int i; clock_t cpu_time; double sec; /* 負荷を掛ける処理(適当です) */ for (i = 0; i < 1000000; i++) { printf("\r計測中..."); } /* CPU時間をチェック */ cpu_time = clock(); /* 秒に直す */ sec = (double)cpu_time / CLOCKS_PER_SEC; printf("%f秒\n", sec); return 0; }
2
#include <stdio.h> #include <time.h> #include <stdlib.h> #define MAX_STAGE 10 int sleep(unsigned long x) { clock_t c1 = clock(), c2; do { if ((c2 = clock()) == (clock_t)-1) //エラー検出 { return 0; } } while (1000.0 * (c2 - c1) / CLOCKS_PER_SEC < x); return 1; } int main(void) { sleep(1000); printf("1秒後"); return 0; }
実行結果
1
//ストップウォッチで計測した場合2~3秒程度でした 計測中...0.263727秒
2
//1秒後に表示される 1秒後
###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は完全に別モノのコードですが、、
まだ回答がついていません
会員登録して回答してみよう