49 lines
915 B
C++
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
|