Lasciatemi chiedere la mia domanda per questo programma di test:risoluzione std :: :: crono high_resolution_clock non corrisponde alle misure
#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;
}
uscita sulla mia macchina:
risoluzione (nano) = 100
quanto nanosecondi std :: cout richiede?
std :: cout richiederà 1000200 nanosecondi
ho ricevuto sia 1000200
o 1000300
o 1000400
o 1000500
o 1000600
o 2000600
come risultato (= 1 o 2 microsecondo). Ovviamente o la risoluzione di std::chrono
è non 100 nano-secondi o il modo in cui misuro il tempo di std::cout
è errato. (perché non ricevo mai qualcosa tra 1 e 2 microsecondi, ad esempio 1500000
?)
Ho bisogno di un timer ad alta risoluzione in C++. Il sistema operativo stesso fornisce un timer ad alta risoluzione perché sono in grado di misurare le cose con precisione al microsecondo utilizzando la classe C# Stopwatch
sulla stessa macchina. Quindi avrei solo bisogno di usare correttamente il timer ad alta risoluzione del sistema operativo!
Come posso risolvere il mio programma per produrre i risultati attesi?
Non riesco a rispondere alla domanda, ma per quello che vale, questo codice produce risultati corretti (precisione nanosecondi) sulla mia macchina, quindi il problema è molto probabilmente nella vostra implementazione di libreria. – Mankarse
Correlati: http://stackoverflow.com/questions/8386128/how-to-get-the-precision-of-high-resolution-clock – stefan
Stai usando VS2012? – David