X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FFdManager.hh;h=ce34bfaa39e902b57bb76f7fd314695bfd6865b6;hb=f2f5d59e83863f3b513950173baee1b6da2aee3c;hp=ecc7f98f5e62c1ac00f1061f3537104df6169c2f;hpb=919e588a2c387c9a910aa8761e65155a0d205bba;p=senf.git diff --git a/Scheduler/FdManager.hh b/Scheduler/FdManager.hh index ecc7f98..ce34bfa 100644 --- a/Scheduler/FdManager.hh +++ b/Scheduler/FdManager.hh @@ -23,11 +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//////////////////////////////////////// @@ -35,17 +37,18 @@ namespace senf { namespace scheduler { - /** \brief - */ + void restart(); + +namespace detail { + class FdManager + : public singleton { public: - /////////////////////////////////////////////////////////////////////////// - // Types - + ///< Event baseclass struct Event { virtual ~Event(); - virtual void signal(int events) = 0; + virtual void signal(int events) = 0; ///< Called when the given event is posted }; enum Events { @@ -53,28 +56,34 @@ namespace scheduler { EV_HUP = Poller::EV_HUP, EV_ERR = Poller::EV_ERR }; - /////////////////////////////////////////////////////////////////////////// - ///\name Structors and default members - ///@{ + using singleton::instance; + using singleton::alive; - ///@} - /////////////////////////////////////////////////////////////////////////// - - void set(int fd, int events, Event * entry); + bool set(int fd, int events, Event * entry); void remove(int fd); - - void timeout(int t); + 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; - - void processOnce(); - + 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"