X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FModuleManager.cc;h=f72cab1812e5fb4426acc9ca8c5bb4867ccdd9d0;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=55c65d2727e313c9460755e69023ea9ebf4822dc;hpb=f539f4271d470794a773a92bacd8ba086c9bc1cd;p=senf.git diff --git a/PPI/ModuleManager.cc b/PPI/ModuleManager.cc index 55c65d2..f72cab1 100644 --- a/PPI/ModuleManager.cc +++ b/PPI/ModuleManager.cc @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -27,7 +27,8 @@ //#include "ModuleManager.ih" // Custom includes -#include "Scheduler/Scheduler.hh" +#include "../Scheduler/Scheduler.hh" +#include "../Utils/membind.hh" #include "Module.hh" //#include "ModuleManager.mpp" @@ -39,18 +40,40 @@ prefix_ void senf::ppi::ModuleManager::init() { - ModuleRegistry::const_iterator i (moduleRegistry_.begin()); - ModuleRegistry::const_iterator const i_end (moduleRegistry_.end()); - for (; i != i_end; ++i) - (*i)->init(); + while (! initQueue_.empty()) { + initQueue_.front()->v_init(); + initQueue_.pop_front(); + } + initRunner_.disable(); } +#ifndef DOXYGEN + +struct senf::ppi::ModuleManager::RunGuard +{ + RunGuard(ModuleManager & m) : manager(m) { manager.running_ = true; } + ~RunGuard() { manager.running_ = false; } + ModuleManager & manager; +}; + +#endif + prefix_ void senf::ppi::ModuleManager::run() { init(); - Scheduler::instance().process(); + RunGuard guard (*this); + scheduler::process(); } +//////////////////////////////////////// +// private members + +prefix_ senf::ppi::ModuleManager::ModuleManager() + : running_(false), terminate_(false), + initRunner_ ("senf::ppi::init", membind(&ModuleManager::init, this), + scheduler::EventHook::PRE, false) +{} + ///////////////////////////////cc.e//////////////////////////////////////// #undef prefix_ //#include "ModuleManager.mpp"