X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Scheduler%2FScheduler.hh;h=89e91f8f5b6472d0ee22e31b9a8ab0264cd3be2b;hb=16d94efc2159cba35fc44e5b26747ae0a2ab237b;hp=5f0f635c5ee8d319264666a0e4f43d3b91d5ff05;hpb=91b6e8382ce61c2d1286203e41d030ef8cd33f3e;p=senf.git diff --git a/Scheduler/Scheduler.hh b/Scheduler/Scheduler.hh index 5f0f635..89e91f8 100644 --- a/Scheduler/Scheduler.hh +++ b/Scheduler/Scheduler.hh @@ -72,8 +72,12 @@ namespace senf { If you need to pass additional information to your handler, use Boost.Bind: \code + // Handle callback function + void callback(UDPv4ClientSocketHandle handle, senf::Scheduler::EventId event) {..} // Pass 'handle' as additional first argument to callback() - Scheduler::instance().add(handle, boost::bind(&callback, handle, _1)) + Scheduler::instance().add(handle, boost::bind(&callback, handle, _1), EV_READ) + // Timeout function + void timeout( int n) {..} // Call timeout() handler with argument 'n' Scheduler::instance().timeout(boost::bind(&timeout, n)) \endcode @@ -82,7 +86,7 @@ namespace senf { href="http://www.boost.org/libs/bind/bind.html">Boost.Bind or senf::membind() \code // e.g. in Foo::Foo() constructor: - Scheduler::instance().add(handle_, senf::membind(&Foo::callback, this)) + Scheduler::instance().add(handle_, senf::membind(&Foo::callback, this)), EV_READ) \endcode @@ -90,7 +94,7 @@ namespace senf { File descriptors are managed using add() or remove() \code - Scheduler::instance().add(handle, &callback); + Scheduler::instance().add(handle, &callback, EV_ALL); Scheduler::instance().remove(handle); \endcode @@ -167,11 +171,23 @@ namespace senf { /////////////////////////////////////////////////////////////////////////// // Types - /** \brief Types of file descriptor events */ - enum EventId { EV_NONE=0, - EV_READ=1, EV_PRIO=2, EV_WRITE=4, - EV_ALL=7, - EV_HUP=8, EV_ERR=16 }; + /** \brief Types of file descriptor events + + These events are grouped into to classes: + \li Ordinary file descriptor events for which handlers may be registered. These are + EV_READ, EV_PRIO and EV_WRITE. EV_ALL is a combination of these three. + \li Error flags. These additional flags may be passed to a handler to pass an error + condition to the handler. + */ + enum EventId { + EV_NONE = 0 /**< No event */ + , EV_READ = 1 /**< File descriptor is readable */ + , EV_PRIO = 2 /**< File descriptor has OOB data */ + , EV_WRITE = 4 /**< File descriptor is writable */ + , EV_ALL = 7 /**< Used to register all events at once (read/prio/write) */ + , EV_HUP = 8 /**< Hangup condition on file handle */ + , EV_ERR = 16 /**< Error condition on file handle */ + }; /** \brief Template typedef for Callback type @@ -234,7 +250,8 @@ namespace senf { the Handle interface defined above. \param[in] cb callback \param[in] eventMask arbitrary combination via '|' - operator of EventId designators. */ + operator of \ref senf::Scheduler::EventId "EventId" + designators. */ template void remove(Handle const & handle, int eventMask = EV_ALL); ///< Remove event callback /**< remove() will remove any callback registered for any of @@ -243,8 +260,8 @@ namespace senf { \param[in] handle file descriptor or handle providing the Handle interface defined above. \param[in] eventMask arbitrary combination via '|' - operator of EventId designators. */ - + operator of \ref senf::Scheduler::EventId "EventId" + designators. */ ///\} ///\name Timeouts @@ -252,7 +269,8 @@ namespace senf { unsigned timeout(ClockService::clock_type timeout, SimpleCallback const & cb); ///< Add timeout event - /**< \param[in] timeout timeout in nanoseconds + /**< \returns timer id + \param[in] timeout timeout in nanoseconds \param[in] cb callback to call after \a timeout milliseconds */ @@ -283,9 +301,9 @@ namespace senf { ///< 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"; } }; + struct InvalidSignalNumberException : public senf::Exception + { InvalidSignalNumberException() + : senf::Exception("senf::Scheduler::InvalidSignalNumberException"){} }; ///\}