Dear chrono maintainer team,
Using the following example :
int main(int argc, char **argv)
{
boost::chrono::process_real_cpu_clock::time_point start = boost::chrono::process_real_cpu_clock::now();
for ( long i = 0; i < 1000; ++i ) std::sqrt( 123.456L ); // burn some time
Sleep(10000); //idle some time
boost::chrono::process_real_cpu_clock::time_point end = boost::chrono::process_real_cpu_clock::now();
std::cout << end << std::endl;
boost::chrono::process_real_cpu_clock::duration elapsed = (end - start);
std::cout << "took real : " << elapsed << "nanoseconds\n";
return 0;
}
I obtain negative times.
I run boost 1.49 win32 on Windows 7 x64 with Visual studio 2010.
Studying the behavior of the timer, I think that the error is one of these :
- process_real_cpu_clock::now() only stores the current time in a 32 bit integer instead of a 64 bit integer
- time_points only prints the 32 lowest bits.
I came to this conclusion by observing the results printed before they got negatives (printing in the loop with the sqrt):
2019000000 nanoseconds is the last value printed before getting negative.
Is there any mistake in my way of using this chronometer ?
Do you have a workaround ?
Thank you for your help !
Wilfried K.