#include <OUX/dispatch/dispatch.hh> class OUX_Dispatcher : public OTC_Dispatcher {
public:
friend class OUX_DispatcherDummy;
static void initialise();
static int dispatch(int theAction=0);
};
OUX_Dispatcher
is a version of the standard dispatcher which
adds support for UNIX event sources. These event sources are,
alarms, timers, signals and events on file descriptors. Jobs
registered directly with the standard dispatcher will only be
executed when there are no pending alarms or timers, and no events
pending on file descriptors. These jobs are given the name of
idle jobs. When the idle jobs registered with the standard
dispatcher are run, they will all be processed once, before
returning to look for pending timers and events on file
descriptors. Signal and alarm events will always preempt idle
jobs. Once the signal and alarm events have been serviced,
returning of idle jobs will commence again, until all the idle
jobs registered at the start of the phase have been returned. Idle
jobs registered while processing current idle jobs, will
not be processed until the next time through the idle job queue.
static void initialise();
dispatch()
function of this class.
static int dispatch(int theAction=0);
theAction
. The default for
theAction
is 0
, which results in all
events sources being checked, and if
necessary cause the function to block. If
non zero, theAction
should be the OR'ed
value of the flags defined by the
enumerated type OUX_JobActions
. The
flags can be used to return a job for a
specific event source, or cause the
function not to block. Asking for a single
idle job to be executed will result in all
idle jobs having to be executed before
timer and events on file descriptors will
once again be checked. If a job is
executed, then 1
is returned. If there
were no jobs, or the function
would have blocked when it had been
directed not to, then 0
is returned.
OUX_JobQueue* queue = new OUX_JobQueue;
OTC_Dispatcher::initialise(queue);
OTC_Dispatcher::run();
If you need to dispatch a single job, use:
((OUX_JobQueue*)OTC_Dispatcher::queue())->dispatch();
OUX_JobQueue