namespace {
bool terminate_ (false);
+ bool running_ (false);
}
prefix_ void senf::scheduler::terminate()
terminate_ = true;
}
+prefix_ bool senf::scheduler::running()
+{
+ return running_;
+}
+
+prefix_ senf::ClockService::clock_type senf::scheduler::now()
+{
+ return running() ? eventTime() : ClockService::now();
+}
+
namespace {
// We don't want try { } catch(...) { ... throw; } since that will make debugging more
senf::scheduler::detail::FIFORunner::instance().startWatchdog();
senf::scheduler::detail::SignalDispatcher::instance().unblockSignals();
senf::scheduler::detail::TimerDispatcher::instance().enable();
+ running_ = true;
}
~SchedulerScopedInit()
senf::scheduler::detail::TimerDispatcher::instance().disable();
senf::scheduler::detail::SignalDispatcher::instance().blockSignals();
senf::scheduler::detail::FIFORunner::instance().stopWatchdog();
+ running_ = false;
}
};
}
{
SchedulerScopedInit initScheduler;
terminate_ = false;
+ running_ = true;
detail::TimerDispatcher::instance().reschedule();
while(! terminate_ && ! (detail::FdDispatcher::instance().empty() &&
detail::TimerDispatcher::instance().empty() &&
&& detail::EventHookDispatcher::instance().empty();
}
+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()));
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::schedulerLogTimeSource