rozdzielczość std :: chrono :: high_resolution_clock nie odpowiada pomiarom

Pozwól, że zadam pytanie w tym programie testowym:

#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;
}

Wyjście na moim komputerze:

rozdzielczość (nano) = 100

ile nanosekund std :: zajmuje cout?

std :: cout zajmuje 1000200 nanosekund

Odbieram też1000200 lub1000300 lub1000400 lub1000500 lub1000600 lub2000600 w rezultacie (= 1 lub 2 mikrosekundy). Oczywiście albo rozdzielczośćstd::chrono jestnie 100 nanosekundlub sposób, w jaki mierzę czasstd::cout jest źle. (dlaczego na przykład nigdy nie otrzymuję czegoś od 1 do 2 mikrosekund)1500000?)

Potrzebuję timera o wysokiej rozdzielczości w C ++. Sam system operacyjny zapewnia zegar o wysokiej rozdzielczości, ponieważ jestem w stanie mierzyć rzeczy z dokładnością do mikrosekund za pomocą C #Stopwatch klasa na tej samej maszynie. Po prostu musiałbym poprawnie użyć zegara o wysokiej rozdzielczości, który ma system operacyjny!

Jak naprawić mój program, aby uzyskać oczekiwane rezultaty?

questionAnswers(3)

yourAnswerToTheQuestion