X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.cc;h=1f946436454a664a4c7f400d981a672380143fcb;hb=164fe477094d42463722584e527a02379ab5d985;hp=9ea0e481ea8f57df5f98fe04ae167e537c557761;hpb=659d27600cc35c7ab211716b709f5e0b1325f10f;p=senf.git diff --git a/Scheduler/Scheduler.cc b/Scheduler/Scheduler.cc index 9ea0e48..1f94643 100644 --- a/Scheduler/Scheduler.cc +++ b/Scheduler/Scheduler.cc @@ -49,6 +49,11 @@ 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_; @@ -87,15 +92,16 @@ 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() && - detail::FileDispatcher::instance().empty())) { + detail::FileDispatcher::instance().empty() && + detail::IdleEventDispatcher::instance().empty()) ) { detail::FdManager::instance().processOnce(); detail::FileDispatcher::instance().prepareRun(); detail::EventHookDispatcher::instance().prepareRun(); detail::TimerDispatcher::instance().prepareRun(); + detail::IdleEventDispatcher::instance().prepareRun(); detail::FIFORunner::instance().run(); detail::TimerDispatcher::instance().reschedule(); } @@ -109,9 +115,11 @@ prefix_ void senf::scheduler::restart() detail::TimerDispatcher* tdd (&detail::TimerDispatcher::instance()); detail::SignalDispatcher* sdd (&detail::SignalDispatcher::instance()); detail::FileDispatcher* fld (&detail::FileDispatcher::instance()); + detail::IdleEventDispatcher* ied (&detail::IdleEventDispatcher::instance()); detail::EventHookDispatcher* eed (&detail::EventHookDispatcher::instance()); eed->~EventHookDispatcher(); + ied->~IdleEventDispatcher(); fld->~FileDispatcher(); sdd->~SignalDispatcher(); tdd->~TimerDispatcher(); @@ -125,6 +133,7 @@ prefix_ void senf::scheduler::restart() new (tdd) detail::TimerDispatcher(); new (sdd) detail::SignalDispatcher(); new (fld) detail::FileDispatcher(); + new (ied) detail::IdleEventDispatcher(); new (eed) detail::EventHookDispatcher(); } @@ -134,6 +143,7 @@ prefix_ bool senf::scheduler::empty() && detail::TimerDispatcher::instance().empty() && detail::FileDispatcher::instance().empty() && detail::SignalDispatcher::instance().empty() + && detail::IdleEventDispatcher::instance().empty() && detail::EventHookDispatcher::instance().empty(); } @@ -155,7 +165,7 @@ prefix_ void senf::scheduler::hiresTimers() prefix_ senf::log::time_type senf::scheduler::LogTimeSource::operator()() const { - return eventTime(); + return senf::scheduler::now(); } ///////////////////////////////////////////////////////////////////////////