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