X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FFdManager.hh;h=ce34bfaa39e902b57bb76f7fd314695bfd6865b6;hb=81f84badf27b66dbadec9890646ca1193e998505;hp=4d7b05e5f0be07cf6768cd19231af2825e693cb9;hpb=40fa3e3f1e0f639c68bd15bf469e35045f94abee;p=senf.git diff --git a/Scheduler/FdManager.hh b/Scheduler/FdManager.hh index 4d7b05e..ce34bfa 100644 --- a/Scheduler/FdManager.hh +++ b/Scheduler/FdManager.hh @@ -23,12 +23,13 @@ /** \file \brief FdManager public header */ -#ifndef HH_FdManager_ -#define HH_FdManager_ 1 +#ifndef HH_SENF_Scheduler_FdManager_ +#define HH_SENF_Scheduler_FdManager_ 1 // Custom includes #include "Poller.hh" #include "ClockService.hh" +#include "../Utils/singleton.hh" //#include "FdManager.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -36,28 +37,14 @@ namespace senf { namespace scheduler { - /** \brief Manage file descriptor event processing + void restart(); - The FdManager is the internal class which manages all events (all events need to somehow be - made accessible via a file descriptor). File descriptors are added or removed from the - FdManager which then allows waiting until an event occurs on one of the descriptors. +namespace detail { - Registered events must be derived from FdManager::Event. The FdManager does \e not manage - the event classes, it just manages pointers to externally owned events (the events are owned - by the respective dispatchers). - - When an event is posted, it's \c signal() member is called. However, this call will \e not - execute the user callback registered for the event, it will just mark the relevant tasks as - runnable. - - \implementation - */ class FdManager + : public singleton { public: - /////////////////////////////////////////////////////////////////////////// - // Types - ///< Event baseclass struct Event { virtual ~Event(); @@ -69,48 +56,34 @@ namespace scheduler { EV_HUP = Poller::EV_HUP, EV_ERR = Poller::EV_ERR }; - /////////////////////////////////////////////////////////////////////////// - ///\name Structors and default members - ///@{ - - FdManager(); - - ///@} - /////////////////////////////////////////////////////////////////////////// - - bool set(int fd, int events, Event * entry); ///< Set file descriptor event mask - /**< This sets the event mask for \a fd to \a events which - is a combination of values from the \c Events enum. If - \a fd is already registered, the registration is - changed to conform to the parameters passed, otherwise - a new registration is added. - \param[in] fd file descriptor - \param[in] events events to register for - \param[in] entry event to signal - \returns \c true, if \a fd supports polling, \c false - otherwise */ - void remove(int fd); ///< Remove \a fd from the manager + using singleton::instance; + using singleton::alive; + bool set(int fd, int events, Event * entry); + void remove(int fd); void timeout(int t); ///< Set event timeout /**< proceseOnce() will wait for max \a t milliseconds for an event to occur. If set to -1, processOnce() will wait forever. */ - int timeout() const; ///< Get timeout in milliseconds - + int timeout() const; void processOnce(); ///< Wait for events /**< This call waits until at least one event is posted but no longer than the current timeout(). */ - ClockService::clock_type eventTime() const; ///< Time of last event - + protected: private: + FdManager(); + Poller poller_; senf::ClockService::clock_type eventTime_; + + friend void senf::scheduler::restart(); + friend class singleton; }; -}} +}}} ///////////////////////////////hh.e//////////////////////////////////////// #include "FdManager.cci"