Add 'unflatten' to doxygen/dot processing
[senf.git] / Scheduler / Scheduler.cc
index 9457743..a79307a 100644 (file)
@@ -41,6 +41,7 @@
 
 namespace {
     bool terminate_ (false);
+    bool running_ (false);
 }
 
 prefix_ void senf::scheduler::terminate()
@@ -48,6 +49,21 @@ prefix_ void senf::scheduler::terminate()
     terminate_ = true;
 }
 
+prefix_ void senf::scheduler::yield()
+{
+    senf::scheduler::detail::FIFORunner::instance().yield();
+}
+
+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
@@ -59,6 +75,7 @@ namespace {
                 senf::scheduler::detail::FIFORunner::instance().startWatchdog();
                 senf::scheduler::detail::SignalDispatcher::instance().unblockSignals();
                 senf::scheduler::detail::TimerDispatcher::instance().enable();
+                running_ = true;
             }
 
         ~SchedulerScopedInit()
@@ -66,6 +83,7 @@ namespace {
                 senf::scheduler::detail::TimerDispatcher::instance().disable();
                 senf::scheduler::detail::SignalDispatcher::instance().blockSignals();
                 senf::scheduler::detail::FIFORunner::instance().stopWatchdog();
+                running_ = false;
             }
     };
 }
@@ -74,6 +92,7 @@ prefix_ void senf::scheduler::process()
 {
     SchedulerScopedInit initScheduler;
     terminate_ = false;
+    running_ = true;
     detail::TimerDispatcher::instance().reschedule();
     while(! terminate_ && ! (detail::FdDispatcher::instance().empty() &&
                              detail::TimerDispatcher::instance().empty() &&