разрешение std :: chrono :: high_resolution_clock не соответствует измерениям
Позвольте мне задать свой вопрос по этой тестовой программе:
#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 much nanoseconds std::cout takes?" << 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
или же1000300
или же1000400
или же1000500
или же1000600
или же2000600
в результате (= 1 или 2 мкс). Очевидно, что либо разрешениеstd::chrono
являетсяне 100 нано секундили же как я измеряю времяstd::cout
неправильно. (почему я никогда не получаю что-то между 1 и 2 микросекундами, например1500000
?)
Мне нужен таймер высокого разрешения в C ++. Сама ОС обеспечивает таймер высокого разрешения, потому что я могу измерять вещи с точностью до микросекунды с помощью C #Stopwatch
класс на одной машине. Поэтому мне просто нужно правильно использовать таймер высокого разрешения, который есть в ОС!
Как мне исправить мою программу, чтобы получить ожидаемые результаты?