разрешение 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 класс на одной машине. Поэтому мне просто нужно правильно использовать таймер высокого разрешения, который есть в ОС!

Как мне исправить мою программу, чтобы получить ожидаемые результаты?

Ответы на вопрос(3)

Ваш ответ на вопрос