このテスト プログラムで質問させてください。
#include <iostream>
#include <chrono>
using std::chrono::nanoseconds;
using std::chrono::duration_cast;
int main(int argc, char* argv[])
{
std::cout
<< "Resolution (nano) = "
<< (double) std::chrono::high_resolution_clock::period::num /
std::chrono::high_resolution_clock::period::den *
1000 * 1000 * 1000
<< std::endl;
auto t1 = std::chrono::high_resolution_clock::now();
std::cout << "How many nanoseconds does std::cout take?" << std::endl;
auto t2 = std::chrono::high_resolution_clock::now();
auto diff = t2-t1;
nanoseconds ns = duration_cast<nanoseconds>(diff);
std::cout << "std::cout takes " << ns.count() << " nanoseconds"
<< std::endl;
return 0;
}
私のマシンでの出力:
解像度 (ナノ) = 100
std::cout には何ナノ秒かかりますか?
std::cout は 1000200 ナノ秒かかります
結果として、またはまたはまたはまたはまたはのいずれ1000200
かを受け取ります(= 1 または 2 マイクロ秒)。明らかに、 の分解能が100 ナノ秒ではないか、時間を測定する方法が間違っています。(たとえば、1 から 2 マイクロ秒の間で何も受信しないのはなぜですか?)1000300
1000400
1000500
1000600
2000600
std::chrono
std::cout
1500000
C++ で高解像度のタイマーが必要です。Stopwatch
同じマシンで C# クラスを使用してマイクロ秒の精度で物事を測定できるため、OS 自体が高解像度のタイマーを提供します。だから、OS が持っている高解像度タイマーを正しく使用する必要があります。
期待どおりの結果が得られるようにプログラムを修正するにはどうすればよいですか?