Patrick Kelley 8fd444092b initial
2025-05-07 15:35:15 -04:00

49 lines
915 B
C++

// libportable/TimerPump.h
// Created by Robin Rowe on 4/19/2015.
// License MIT Open Source
//
#ifndef TimerPump_h
#define TimerPump_h
#include "Pump.h"
namespace portable
{
class TimerPump
: public Pump
{protected:
typedef std::chrono::milliseconds milliseconds;
milliseconds wakeDelay;
bool isTimeout;
void Wait(Lock& lock) override
{ isTimeout = false;
if(wakeDelay.count())
{ isTimeout = std::cv_status::timeout==cv.wait_for(lock,milliseconds(wakeDelay));
return;
}
cv.wait(lock);
}
public:
TimerPump(const char* pumpName)
: Pump(pumpName)
, wakeDelay(0)
, isTimeout(false)
{}
bool Start(int millis=0,bool isJoin = false)
{ SetTimeout(millis);
return Pump::Start(isJoin);
}
void SetTimeout(int millis)
{ wakeDelay = milliseconds(millis);
}
long long GetTimeout() const
{ return wakeDelay.count();
}
};
}
#endif