8#ifndef INCLUDED_BSLMT_CHRONOUTIL
9#define INCLUDED_BSLMT_CHRONOUTIL
219#include <bslscm_version.h>
226#ifdef BSLS_LIBRARYFEATURES_HAS_CPP11_BASELINE_LIBRARY
227#include <bsl_chrono.h>
249 template <
class REP_TYPE,
class PERIOD_TYPE>
251 const bsl::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration);
255 template <
class CLOCK>
273 template <
class PRIMITIVE,
class CLOCK,
class DURATION>
275 int timedWait(PRIMITIVE *primitive,
276 const bsl::chrono::time_point<CLOCK, DURATION>& absTime);
293 template <
class PRIMITIVE,
class ARG_TYPE,
class CLOCK,
class DURATION>
295 int timedWait(PRIMITIVE *primitive,
297 const bsl::chrono::time_point<CLOCK, DURATION>& absTime);
309template <
class REP_TYPE,
class PERIOD_TYPE>
312 const bsl::chrono::duration<REP_TYPE, PERIOD_TYPE>& duration)
314 using namespace bsl::chrono;
318 bsl::chrono::seconds wholeSecs =
319 duration_cast<bsl::chrono::seconds>(duration);
320 nanoseconds nanoSecs = duration_cast<nanoseconds>(duration - wholeSecs);
322 static_cast<int>(nanoSecs.count()));
325template <
class CLOCK>
334bool ChronoUtil::isMatchingClock<bsl::chrono::system_clock>(
342bool ChronoUtil::isMatchingClock<bsl::chrono::steady_clock>(
348template <
class PRIMITIVE,
class CLOCK,
class DURATION>
349int ChronoUtil::timedWait(
350 PRIMITIVE *primitive,
351 const bsl::chrono::time_point<CLOCK, DURATION>& absTime)
353 if (ChronoUtil::isMatchingClock<CLOCK>(primitive->clockType())) {
354 return primitive->timedWait(
358 typename CLOCK::time_point now = CLOCK::now();
364 while (absTime > now) {
367 .addDuration(absTime - now);
368 ret = primitive->timedWait(ti);
369 if (PRIMITIVE::e_TIMED_OUT != ret) {
374 return PRIMITIVE::e_TIMED_OUT;
378template <
class PRIMITIVE,
class ARG_TYPE,
class CLOCK,
class DURATION>
379int ChronoUtil::timedWait(
380 PRIMITIVE *primitive,
382 const bsl::chrono::time_point<CLOCK, DURATION>& absTime)
384 if (ChronoUtil::isMatchingClock<CLOCK>(primitive->clockType())) {
385 return primitive->timedWait(
390 typename CLOCK::time_point now = CLOCK::now();
396 while (absTime > now) {
399 .addDuration(absTime - now);
400 ret = primitive->timedWait(argument, ti);
401 if (PRIMITIVE::e_TIMED_OUT != ret) {
406 return PRIMITIVE::e_TIMED_OUT;
Definition bsls_timeinterval.h:307
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bslmt_barrier.h:344
Enum
Definition bsls_systemclocktype.h:119
@ e_MONOTONIC
Definition bsls_systemclocktype.h:128
@ e_REALTIME
Definition bsls_systemclocktype.h:122
static TimeInterval now(SystemClockType::Enum clockType)
Definition bsls_systemtime.h:177