- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
838 :デフォルトの名無しさん[sage]:2015/02/03(火) 10:23:01.06 ID:cHPe/D1w - VS2013で
for (int i = 0; i<1000; i++) { auto nowS = std::chrono::system_clock::now(); // 10秒前後掛かる重い処理 auto nowE = std::chrono::system_clock::now(); auto millisec = duration_cast_milliseconds(nowE - nowS).count(); } みたいな感じで 重い処理に掛かる時間を計測しているのですが、1000回繰り返して正常に終わる場合もあれば、 1000回繰り返すと、時々1,2回くらい計測時間がマイナスになるんですが、そんなこと有りますか?
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
840 :デフォルトの名無しさん[sage]:2015/02/03(火) 13:24:52.25 ID:cHPe/D1w - >>839
ありがとうございました。steady_clockを試してみます。
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
841 :デフォルトの名無しさん[sage]:2015/02/03(火) 17:32:32.52 ID:cHPe/D1w - その後、steady_clockを使って試したのですが、以下のコードをWin7-64のVS2013でWinXP向けにビルドして
WinXP32SP3のマシンで実行するとやはり、マイナスの値が計測されました。このコードで何かおかしな部分ありますか? だいたいいつもi=2000前後で発生します。でも、その後は、また正常に計測されます。再現実験に2,3時間かかるので 困っています。 #include <Windows.h> #include <string> #include <chrono> #include <iostream> using namespace std; void main(){ for (int i = 0; i < 1000000; i++){ auto nowS = std::chrono::steady_clock::now(); Sleep(5 * 1000); // 5 sec auto nowE = std::chrono::steady_clock::now(); auto millisec = std::chrono::duration_cast<std::chrono::milliseconds>(nowE - nowS).count(); cout << "i=" << i << endl; cout << millisec << endl; if (millisec < 0){ wstring msg = L"millisec=" + to_wstring(millisec); MessageBox(NULL, msg.c_str(), L"マイナス", MB_OK); } } }
|
- 【初心者歓迎】C/C++室 Ver.94【環境依存OK】 [転載禁止]©2ch.net
843 :デフォルトの名無しさん[sage]:2015/02/03(火) 18:20:52.61 ID:cHPe/D1w - >>842
レスありがとうございました。 WinAPIで確実なのはGetLocalTime()でしょうかね? なお841をXP向けにReleaseビルドしたときはランタイムライブラリはマルチスレッド(/MT) です。それ以外の設定はデフォルトだと思います。
|