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?