Use new RateLimiter for ConditionalRun

This commit is contained in:
Alexey Rybalchenko
2018-08-23 16:10:32 +02:00
committed by Dennis Klein
parent 6545daeda7
commit 2498837b8e
5 changed files with 7 additions and 15 deletions

View File

@@ -71,7 +71,6 @@ FairMQDevice::FairMQDevice(FairMQProgOptions* config, const fair::mq::tools::Ver
, fMultitransportProceed(false)
, fVersion(version)
, fRate(0.)
, fLastTime(0)
, fRawCmdLineArgs()
{
}
@@ -516,20 +515,14 @@ void FairMQDevice::RunWrapper()
}
else
{
using Clock = chrono::steady_clock;
using TimeScale = chrono::microseconds;
const TimeScale::rep period = TimeScale::period::den / fRate;
const auto reftime = Clock::now();
fair::mq::tools::RateLimiter rateLimiter(fRate);
while (CheckCurrentState(RUNNING) && ConditionalRun())
{
if (fRate > 0.001) {
auto timespan = static_cast<TimeScale::rep>(chrono::duration_cast<TimeScale>(Clock::now() - reftime).count() - fLastTime);
if (timespan < period) {
TimeScale sleepfor(period - timespan);
this_thread::sleep_for(sleepfor);
if (fRate > 0.001)
{
rateLimiter.maybe_sleep();
}
fLastTime = chrono::duration_cast<TimeScale>(Clock::now() - reftime).count();
}
}
Run();