
On Wed, Oct 29, 2008 at 3:15 PM, Bjørn Roald <bjorn@4roald.org> wrote:
Jordans, R. wrote:
Hey all,
I was looking at Boost.Timer and I noticed that it shows different results when it's used in a threaded program on Windows or Unix machines. A closer inspection revealed that it uses clock() to do it's timings.
Digging a bit deeper I found that clock() is specified differently on Windows than it is in my Linux man-page. On windows it counts 'wall clock' time, basically what I'd expect from a class named timer but on Linux it counts CPU time. Thus it will give the result for completely different concepts of time elapsed depending on my system.
Two questions; 1) is there a good way to solve this,
If you want a portable wall-clock timer and a simple Boost.Timer like interface you can just copy the boost/timer.hpp header file into your own namespace and rewrite it to use boost/date_time/posix_time stuff instead of ::clock(). I have done that before and it was really simple. There is a BOOST_ALL_NO_LIB macro you can define before you include the date_time headers so you avoid creating dependencies to anything but the header files in boost.
I've got a much better timer with uniform behavior across Windows and POSIX. But I've been holding off submitting it until the C++0x date-time interfaces froze. That has now happened, and Howard Hinnant has made his proof of concept implementation available under the Boost license to use as a starting point for a Boost implementation. Maybe I can get something good enough to be useful together sometime in November. --Beman