|
Boost Users : |
Subject: Re: [Boost-users] [Chrono] Negative real time
From: Wilfried Kirschenmann (wilfried.kirschenmann_at_[hidden])
Date: 2012-05-23 03:39:31
On Tue, May 22, 2012 at 9:41 PM, Vicente J. Botet Escriba <
vicente.botet_at_[hidden]> wrote:
> 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
>
> };
>
>
> From the fact that it behaves as if there were a 32bit overflow. Which is
in fact the case : https://svn.boost.org/trac/boost/ticket/6361
The problem is fixed in 1.50 and I no longer get negative times.
Wilfried K.
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net