cwTime.h/cpp, cwMutex.cpp : Time now depends on CLOCK_MONOTONIC instead of CLOCK_REALTIME.
mutex::lock() apparently depends on CLOCK_REALTIME and so that is now handled with a direct call to clock_gettime().
This commit is contained in:
parent
28c8dfc982
commit
e1aa033958
@ -104,7 +104,11 @@ cw::rc_t cw::mutex::lock( handle_t h, unsigned timeout_milliseconds )
|
||||
int sysRc;
|
||||
time::spec_t ts;
|
||||
|
||||
time::get(ts);
|
||||
// Apparently timedlock depends on using CLOCK_REALTIME vs CLOCK_MONOTONIC
|
||||
// so we can't call to time::current_time() which uses CLOCK_MONOTONIC.
|
||||
// TODO: See this: https://stackoverflow.com/questions/14248033/clock-monotonic-and-pthread-mutex-timedlock-pthread-cond-timedwait
|
||||
// and consider changing this to use CLOCK_MONOTONIC.
|
||||
clock_gettime(CLOCK_REALTIME,&ts);
|
||||
time::advanceMs(ts,timeout_milliseconds);
|
||||
|
||||
|
||||
|
17
cwTime.cpp
17
cwTime.cpp
@ -44,11 +44,16 @@ void cw::time::get( spec_t& t )
|
||||
#include <sys/time.h> // gettimeofday()
|
||||
void cw::time::get( spec_t& t )
|
||||
{
|
||||
// NOTcw::mutex::lock(h,timeout) relies on using
|
||||
// CLOCK_REALTIME. If the source of this clock changes
|
||||
// then change cw::mutex::loc(h,timeout) as well
|
||||
clock_gettime(CLOCK_REALTIME,&t);
|
||||
clock_gettime(CLOCK_MONOTONIC,&t);
|
||||
}
|
||||
|
||||
cw::time::spec_t cw::time::current_time()
|
||||
{
|
||||
spec_t t;
|
||||
clock_gettime(CLOCK_REALTIME,&t);
|
||||
return t;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// this assumes that the seconds have been normalized to a recent start time
|
||||
@ -177,8 +182,8 @@ cw::rc_t cw::time::now( spec_t& ts )
|
||||
|
||||
memset(&ts,0,sizeof(ts));
|
||||
|
||||
if((errRC = clock_gettime(CLOCK_REALTIME, &ts)) != 0 )
|
||||
rc = cwLogSysError(kInvalidOpRC,errRC,"Unable to obtain system time.");
|
||||
if((errRC = clock_gettime(CLOCK_MONOTONIC, &ts)) != 0 )
|
||||
rc = cwLogSysError(kInvalidOpRC,errRC,"Unable to obtain system time.");
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
3
cwTime.h
3
cwTime.h
@ -20,6 +20,7 @@ namespace cw
|
||||
|
||||
// Get the time
|
||||
void get( spec_t& tRef );
|
||||
spec_t current_time(); // same as get()
|
||||
|
||||
// Return the elapsed time (t1 - t0) in microseconds
|
||||
// t1 is assumed to be at a later time than t0.
|
||||
@ -61,7 +62,7 @@ namespace cw
|
||||
|
||||
void setZero( spec_t& t0 );
|
||||
|
||||
rc_t now( spec_t& ts );
|
||||
rc_t now( spec_t& ts ); // same as get()
|
||||
|
||||
void subtractMicros( spec_t& ts, unsigned us );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user