return scheduler::detail::FIFORunner::instance().hangCount();
}
+prefix_ void senf::scheduler::hiresTimers()
+{
+#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().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///////////////////////////////////////
#undef prefix_