X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FFdDispatcher.hh;h=bfca398bfe3e74c802b7a052e357675b498b6ba2;hb=db007c39287e3c666dd6b53edc8c3404617c7dd5;hp=bb947ea6f77f20db7ce569b4150e169226cd1d9f;hpb=919e588a2c387c9a910aa8761e65155a0d205bba;p=senf.git diff --git a/Scheduler/FdDispatcher.hh b/Scheduler/FdDispatcher.hh index bb947ea..bfca398 100644 --- a/Scheduler/FdDispatcher.hh +++ b/Scheduler/FdDispatcher.hh @@ -38,7 +38,9 @@ namespace senf { namespace scheduler { - /** \brief + /** \brief Scheduler dispatcher managing poll-able file descriptors + + File descriptors are added directly to the event loop. */ class FdDispatcher { @@ -58,18 +60,33 @@ namespace scheduler { ///\name Structors and default members ///@{ - explicit FdDispatcher(FdManager & manager, FIFORunner & runner); + FdDispatcher(FdManager & manager, FIFORunner & runner); ~FdDispatcher(); ///@} /////////////////////////////////////////////////////////////////////////// - void add(int fd, Callback const & cb, int events = EV_ALL); - void remove(int fd, int events = EV_ALL); + bool add(std::string const & name, int fd, Callback const & cb, int events = EV_ALL); + ///< Add file descriptor callback + /**< There is always one active callback for each + combination of file descriptor and event. Registering a + new callback will overwrite the old callback. + \param[in] name descriptive name + \param[in] fd file descriptor + \param[in] cb callback + \param[in] events Events to call \a cb for */ + + void remove(int fd, int events = EV_ALL); ///< Remove callback + /**< \param[in] fd file descriptor + \param[in] events Events for which to remove the + callback */ + + bool empty() const; ///< \c true, if no file descriptors are registered. protected: private: + /// Internal: File descriptor event struct FdEvent : public detail::FdTask<0, FdEvent>, public detail::FdTask<1, FdEvent>, @@ -80,10 +97,11 @@ namespace scheduler { typedef detail::FdTask<1, FdEvent> PrioTask; typedef detail::FdTask<2, FdEvent> WriteTask; - virtual void signal(int events); + explicit FdEvent(std::string const & name) + : ReadTask (name), PrioTask (name), WriteTask (name) {} + virtual void signal(int events); int activeEvents() const; - int events; };