Add TimerDescriptor::setRelative(uint64_t usec)

This commit is contained in:
Azat Khuzhin 2021-08-23 21:17:11 +03:00
parent 225f44248c
commit 2df0411b3f
2 changed files with 11 additions and 3 deletions

View File

@ -74,17 +74,24 @@ void TimerDescriptor::drain() const
} }
} }
void TimerDescriptor::setRelative(Poco::Timespan timespan) const void TimerDescriptor::setRelative(uint64_t usec) const
{ {
static constexpr uint32_t TIMER_PRECISION = 1e6;
itimerspec spec; itimerspec spec;
spec.it_interval.tv_nsec = 0; spec.it_interval.tv_nsec = 0;
spec.it_interval.tv_sec = 0; spec.it_interval.tv_sec = 0;
spec.it_value.tv_sec = timespan.totalSeconds(); spec.it_value.tv_sec = usec / TIMER_PRECISION;
spec.it_value.tv_nsec = timespan.useconds() * 1000; spec.it_value.tv_nsec = (usec % TIMER_PRECISION) * 1'000;
if (-1 == timerfd_settime(timer_fd, 0 /*relative timer */, &spec, nullptr)) if (-1 == timerfd_settime(timer_fd, 0 /*relative timer */, &spec, nullptr))
throwFromErrno("Cannot set time for timer_fd", ErrorCodes::CANNOT_SET_TIMER_PERIOD); throwFromErrno("Cannot set time for timer_fd", ErrorCodes::CANNOT_SET_TIMER_PERIOD);
} }
void TimerDescriptor::setRelative(Poco::Timespan timespan) const
{
setRelative(timespan.totalMicroseconds());
}
} }
#endif #endif

View File

@ -24,6 +24,7 @@ public:
void reset() const; void reset() const;
void drain() const; void drain() const;
void setRelative(uint64_t usec) const;
void setRelative(Poco::Timespan timespan) const; void setRelative(Poco::Timespan timespan) const;
}; };