Le 22/05/12 18:55, Wilfried Kirschenmann a écrit :
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
I don't know from where are you getting this conclusion.
process_real_cpu_clock is using boost::int_least64_t, as
representation.
typedef duration<boost::int_least64_t, nano>
nanoseconds; // at least 64 bits needed
class BOOST_CHRONO_DECL process_real_cpu_clock {
public:
typedef nanoseconds duration;
typedef duration::rep rep;
typedef duration::period period;
typedef chrono::time_point<process_real_cpu_clock>
time_point;
BOOST_STATIC_CONSTEXPR bool is_steady = true;
static BOOST_CHRONO_INLINE time_point now() BOOST_NOEXCEPT;
#if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING
static BOOST_CHRONO_INLINE time_point now(system::error_code
& ec );
#endif
};