boost timer with sleep

The following code:
#include <iostream>
#include

Andre Paim Lemos wrote: [...]
andre@andre-desktop:~/test$ ./timer_test 0 0
Is this result expected? Why?
I'd say yes, this is expected. The class is documented as using clock() for measuring time, and clock() return the processor time used by the process.
There is another timer implementation that works with sleep?
In Boost? Not that I'm aware of. Have a look at gettimeofday() to roll your own.
[]'s Andre Paim Lemos
HTH, Markus

On Nov 12, 2008, at 12:31 AM, Bruno Lalande wrote:
There is another timer implementation that works with sleep?
In Boost? Not that I'm aware of.
If I remember well, Beman Dawes plans to propose a new implementation of timer. Don't know if it's supposed to behave differently about that precise issue though.
I recently ran into this problem with timer and replaced it with an implementation using the Date Time library. My use case was to have a stale lock timeout on a lock object. The lock object constructor takes a timeout value, expressed as milliseconds. I use the timeout to create a time_duration object. Then, with the current time and the duration, I construct a time_period object that expresses the valid lifetime of the lock object. When I check for timeout I just see if the current time is within the time period. At object creation: boost::posix_time::time_duration d (0,0,existenceTimeoutInMillisec,0); boost::posix_time::ptime now(boost::posix_time::microsec_clock::local_time()); // This defines the overall lifetime period for the lock m_pOverallTimePeriod.reset (new boost::posix_time::time_period (now, d)); which records the creation time. Note that m_pOverallTimePeriod is declared as: boost::scoped_ptrboost::posix_time::time_period m_pOverallTimePeriod; and I use a NULL pointer value to mean that there is no timeout. My timeout check looks like this: inline bool isTimedOut (void) { boost::posix_time::ptime now(boost::posix_time::microsec_clock::local_time()); if ( m_pOverallTimePeriod) { return ( ! m_pOverallTimePeriod->contains (now)); } else { return false; } } The whole point of having the lock object is to coordinate a bunch of competing threads, and this implementation works even though the threads get suspended. As always, YMMV. Best regards, Rush
participants (4)
-
Andre Paim Lemos
-
Bruno Lalande
-
Markus Schöpflin
-
Rush Manbert