X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.hh;h=42432ed56a856ab106cb5ccd81e65b09333d969c;hb=949e357e249299c8519aa3af62245a0010dcce44;hp=7696a64f820b663574161650100f2a172f3234c6;hpb=c7512677a51c8ba551ab23611d6e99bdc7a7fdfa;p=senf.git diff --git a/Scheduler/Scheduler.hh b/Scheduler/Scheduler.hh index 7696a64..42432ed 100644 --- a/Scheduler/Scheduler.hh +++ b/Scheduler/Scheduler.hh @@ -37,7 +37,7 @@ #include #include #include "ClockService.hh" -#include "../Utils/Logger/Target.hh" +#include "../Utils/Logger/SenfLog.hh" //#include "scheduler.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -153,11 +153,17 @@ namespace senf { wait for signals \e only. \todo Fix EventId parameter (probably to int) to allow |-ing without casting ... + + \todo Fix the file support to use threads (?) fork (?) and a pipe so it works reliably even + over e.g. NFS. */ class Scheduler : boost::noncopyable { public: + + SENF_LOG_CLASS_AREA(); + /////////////////////////////////////////////////////////////////////////// // Types @@ -173,13 +179,14 @@ namespace senf { sole member is a typedef symbol defining the callback type given the handle type. The Callback is any callable object taking a \c Handle and an \c EventId as argument. - template - struct GenericCallback { - typedef boost::function::param_type, - EventId) > Callback; - }; + \code + template + struct GenericCallback { + typedef boost::function::param_type, + EventId) > Callback; + }; + \endcode */ - typedef boost::function FdCallback; /** \brief Callback type for timer events */ @@ -275,6 +282,7 @@ namespace senf { void unregisterSignal(unsigned signal); ///< Remove signal handler for \a signal + /// The signal number passed to registerSignal or unregisterSignal is invalid struct InvalidSignalNumberException : public std::exception { virtual char const * what() const throw() { return "senf::Scheduler::InvalidSignalNumberException"; } }; @@ -317,7 +325,11 @@ namespace senf { FdCallback cb_prio; FdCallback cb_write; + EventSpec() : file(false) {} + int epollMask() const; + + bool file; }; /** \brief Timer event specification @@ -341,6 +353,7 @@ namespace senf { typedef std::map FdTable; typedef std::map TimerMap; // sorted by id + typedef std::vector FdEraseList; # ifndef DOXYGEN @@ -361,6 +374,8 @@ namespace senf { typedef std::vector SigHandlers; FdTable fdTable_; + FdEraseList fdErase_; + unsigned files_; unsigned timerIdCounter_; TimerQueue timerQueue_;