prefix_ void senf::scheduler::hiresTimers()
{
- detail::TimerDispatcher::instance().setTimerSource(
- std::auto_ptr<detail::TimerSource>(new detail::POSIXTimerSource()));
+#ifdef HAVE_TIMERFD
+ if (haveScalableHiresTimers())
+ detail::TimerDispatcher::instance().timerSource(
+ std::auto_ptr<detail::TimerSource>(new detail::TimerFDTimerSource()));
+ else
+#endif
+ detail::TimerDispatcher::instance().timerSource(
+ std::auto_ptr<detail::TimerSource>(new detail::POSIXTimerSource()));
}
prefix_ void senf::scheduler::loresTimers()
{
- detail::TimerDispatcher::instance().setTimerSource(
+ detail::TimerDispatcher::instance().timerSource(
std::auto_ptr<detail::TimerSource>(new detail::PollTimerSource()));
}
prefix_ bool senf::scheduler::haveScalableHiresTimers()
{
+#ifndef HAVE_TIMERFD
return false;
+#else
+ return true;
+#endif
+}
+
+prefix_ bool senf::scheduler::usingHiresTimers()
+{
+ return dynamic_cast<detail::PollTimerSource*>(
+ detail::TimerDispatcher::instance().timerSource()) == 0;
+}
+
+///////////////////////////////////////////////////////////////////////////
+// senf::scheduler::BlockSignals
+
+prefix_ senf::scheduler::BlockSignals::~BlockSignals()
+{
+ unblock();
+}
+
+prefix_ bool senf::scheduler::BlockSignals::blocked()
+ const
+{
+ return blocked_;
}
///////////////////////////////cci.e///////////////////////////////////////