summaryrefslogtreecommitdiff
path: root/ace/ReactorEx.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/ReactorEx.h')
-rw-r--r--ace/ReactorEx.h294
1 files changed, 0 insertions, 294 deletions
diff --git a/ace/ReactorEx.h b/ace/ReactorEx.h
deleted file mode 100644
index e5903fb5eeb..00000000000
--- a/ace/ReactorEx.h
+++ /dev/null
@@ -1,294 +0,0 @@
-/* -*- C++ -*- */
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// ace
-//
-// = FILENAME
-// ReactorEx.h
-//
-// = AUTHOR
-// Tim Harrison and Doug Schmidt
-//
-// ============================================================================
-
-#if !defined (ACE_REACTOREX_H)
-#define ACE_REACTOREX_H
-
-#include "ace/Time_Value.h"
-#include "ace/Timer_Queue.h"
-#include "ace/Event_Handler.h"
-#include "ace/Message_Queue.h"
-#include "ace/Token.h"
-#include "ace/Synch.h"
-
-#if defined (ACE_MT_SAFE)
-
-#if defined (ACE_REACTOREX_HAS_DEADLOCK_DETECTION)
-#include "ace/Local_Tokens.h"
-typedef ACE_Local_Mutex ACE_REACTOREX_MUTEX;
-#else
-typedef ACE_Token ACE_REACTOREX_MUTEX;
-#endif /* ACE_REACTOR_HAS_DEADLOCK_DETECTION */
-
-// Forward decl.
-class ACE_ReactorEx;
-
-class ACE_Export ACE_ReactorEx_Token : public ACE_REACTOREX_MUTEX
-{
-public:
- ACE_ReactorEx_Token (ACE_ReactorEx &r);
-
- virtual void sleep_hook (void);
- // Called just before the thread that's trying to do the work goes
- // to sleep.
-
- void dump (void) const;
- // Dump the state of an object.
-
- ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
-
-private:
- ACE_ReactorEx &reactorEx_;
-};
-
-#endif /* ACE_MT_SAFE */
-
-#if defined (ACE_WIN32)
-// ************************************************************
-
-class ACE_Export ACE_ReactorEx_Notify : public ACE_Event_Handler
- // = TITLE
- // Unblock the <ACE_ReactorEx> from its event loop, passing it an
- // optional <ACE_Event_Handler> to dispatch.
- //
- // = DESCRIPTION
- // This implementation is necessary for cases where the
- // <ACE_ReactorEx> is run in a multi-threaded program. In this
- // case, we need to be able to unblock WaitForMultipleObjects()
- // when updates occur other than in the main <ACE_ReactorEx>
- // thread. To do this, we signal an auto-reset event the
- // <ACE_ReactorEx> is listening on. If an <ACE_Event_Handler>
- // and <ACE_Reactor_Mask> is passed to <notify>, the appropriate
- // <handle_*> method is dispatched in the context of the
- // <ACE_ReactorEx> thread.
-{
-public:
- int notify (ACE_Event_Handler *eh = 0,
- ACE_Reactor_Mask mask = ACE_Event_Handler::EXCEPT_MASK);
- // Special trick to unblock WaitForMultipleObjects() when updates
- // occur in somewhere other than the main <ACE_ReactorEx> thread.
- // All we do is enqueue <eh> and <mask> onto the <ACE_Message_Queue>
- // and wakeup the ReactorEx by signaling its <ACE_Event> handle.
-
-private:
- virtual int handle_signal (int signum, siginfo_t * = 0, ucontext_t * = 0);
- // Called when the notification event waited on by <ACE_ReactorEx>
- // is signaled. This dequeues all pending <ACE_Event_Handlers> and
- // dispatches them.
-
- virtual ACE_HANDLE get_handle (void) const;
- // Returns a handle to the <ACE_Auto_Event>.
-
- ACE_Auto_Event notify_event_;
- // A handle.
-
- ACE_Message_Queue<ACE_MT_SYNCH> message_queue_;
- // Message queue that keeps track of pending <ACE_Event_Handlers>.
- // This queue must be thread-safe because it can be called by
- // multiple threads of control.
-};
-
-class ACE_Export ACE_ReactorEx
- // = TITLE
- // An object oriented event demultiplexor and event handler
- // ReactorEx for Win32 WaitForMultipleObjects
- //
- // = DESCRIPTION
-
- // The ACE_ReactorEx is an object-oriented event demultiplexor
- // and event handler ReactorEx. The sources of events that the
- // ACE_ReactorEx waits for and dispatches includes I/O events,
- // general Win32 synchronization events (such as mutexes,
- // semaphores, threads, etc.) and timer events.
-{
-public:
- enum
- {
- MAX_SIZE = MAXIMUM_WAIT_OBJECTS,
- // Default size of the ReactorEx's handle table.
- };
-
- // = Initialization and termination methods.
-
- ACE_ReactorEx (ACE_Timer_Queue *tq = 0);
- // Initialize the new ACE_ReactorEx with the default size.
-
- virtual ~ACE_ReactorEx (void);
- // Close down the ReactorEx and release all of its resources.
-
- // = Event loop drivers.
-
- virtual int handle_events (ACE_Time_Value *max_wait_time = 0,
- int wait_all = 0,
- ACE_Event_Handler *wait_all_callback = 0,
- int alertable = 0);
- // This event loop driver blocks for up to <max_wait_time> for I/O
- // or signaled events occur. Note that <max_wait_time> can be 0, in
- // which case this method blocks until I/O events or signaled events
- // occur. Returns 0 if timed out, 1 if an event occurred, and -1 if
- // an error occured. <max_wait_time> is decremented to reflect how
- // much time this call took. For instance, if a time value of 3
- // seconds is passed to handle_events and an event occurs after 2
- // seconds, <max_wait_time> will equal 1 second. This can be used
- // if an application wishes to handle events for some fixed amount
- // of time.
- //
- // If <wait_all> is TRUE, then handle_events will only dispatch the
- // handlers if *all* handles become active. If a timeout occurs,
- // then no handlers will be dispatched. If <wait_all_callback> is 0
- // then we dispatch the <handle_signal> method on each and every
- // registered HANDLE. Otherwise, we just call back the
- // <handle_signal> method of the <wait_all_callback> object, after
- // first assigning the siginfo_t <si_handles_> argument to point to
- // the array of signaled handles.
- //
- // If <alertable> is true, then <WaitForMultipleObjectsEx> is used
- // as the demultiplexing call, otherwise <WaitForMultipleObjects> is
- // used.
-
- virtual int handle_events (ACE_Time_Value &max_wait_time,
- int wait_all = 0,
- ACE_Event_Handler *wait_all_callback = 0,
- int alertable = 0);
- // This method is just like the one above, except the <max_wait_time>
- // value is a reference and must therefore never be NULL.
-
- // = Register and remove Handlers.
- virtual int register_handler (ACE_Event_Handler *eh,
- ACE_HANDLE handle = ACE_INVALID_HANDLE);
- // Register an Event_Handler <eh>. If handle == ACE_INVALID_HANDLE
- // the <ReactorEx> will call the <get_handle> method of <eh> to
- // extract the underlying I/O handle.
-
- virtual int remove_handler (ACE_Event_Handler *eh,
- ACE_Reactor_Mask mask = 0);
- // Removes <eh> from the ReactorEx. Note that the ReactorEx will
- // call the <get_handle> method of <eh> to extract the underlying
- // I/O handle. If <mask> == ACE_Event_Handler::DONT_CALL then the
- // <handle_close> method of the <eh> is not invoked.
-
- int notify (ACE_Event_Handler * = 0,
- ACE_Reactor_Mask = ACE_Event_Handler::EXCEPT_MASK);
- // Wakeup <ACE_ReactorEx> if currently blocked in
- // <WaitForMultipleObjects>.
-
- // = Timer management.
- virtual int schedule_timer (ACE_Event_Handler *eh,
- const void *arg,
- const ACE_Time_Value &delta,
- const ACE_Time_Value &interval = ACE_Time_Value::zero);
- // Schedule an Event Handler <eh> that will expire after <delta>
- // amount of time. If it expires then <arg> is passed in as the
- // value to <handle_timeout> method call on <eh>. If <interval> is
- // != to ACE_Time_Value::zero then it is used to reschedule <eh>
- // automatically. This method returns a timer handle that uniquely
- // identifies the <eh> in an internal list. This timer handle can
- // be used to cancel an Event_Handler before it expires. The
- // cancellation ensures that timer_ids are unique up to values of
- // greater than 2 billion timers. As long as timers don't stay
- // around longer than this there should be no problems with
- // accidentally deleting the wrong timer.
-
- virtual int cancel_timer (ACE_Event_Handler *event_handler);
- // Cancel all Event_Handlers that match the address of
- // <event_handler>.
-
- virtual int cancel_timer (int timer_id, const void **arg = 0);
- // Cancel the single Event_Handler that matches the <timer_id> value
- // (which was returned from the schedule method). If arg is
- // non-NULL then it will be set to point to the ``magic cookie''
- // argument passed in when the Event_Handler was registered. This
- // makes it possible to free up the memory and avoid memory leaks.
-
- void dump (void) const;
- // Dump the state of an object.
-
- ACE_ALLOC_HOOK_DECLARE;
- // Declare the dynamic allocation hooks.
-
-protected:
- virtual int remove_handler (int index,
- ACE_Reactor_Mask mask);
- // Helper function for removing handlers.
-
- int dispatch (size_t index);
- // Dispatches any active handles from handles_[<index>] to
- // handles_[active_handles_] using <WaitForMultipleObjects> to poll
- // through our handle set looking for active handles.
-
- int dispatch (ACE_Event_Handler *wait_all_callback);
- // This is called when the user called handle_events() with the
- // <wait_all> parameter enabled. In this case, all the handlers are
- // now signaled. If <wait_all_callback> is NULL then we dispatch
- // the <handle_signal> method on each and every HANDLE in the
- // dispatch array. Otherwise, we just call back the <handle_signal>
- // method of the <wait_all_callback> object, after first assigning
- // the siginfo_t <si_handles_> argument to point to the array of
- // signaled handles.
-
- int dispatch_handler (int index);
- // Dispatches a single handler. Returns 0 on success, -1 if the
- // handler was removed.
-
- ACE_Timer_Queue *timer_queue_;
- // Defined as a pointer to allow overriding by derived classes...
-
- int delete_timer_queue_;
- // Keeps track of whether we should delete the timer queue (if we
- // didn't create it, then we don't delete it).
-
- ACE_HANDLE handles_[MAX_SIZE];
- // Array of handles passed to WaitForMultipleObjects.
-
- ACE_Event_Handler *event_handlers_[MAX_SIZE];
- // Array of Event_Handler pointers that store the handlers to
- // dispatch when the corresponding handles_ entry becomes signaled.
-
- size_t active_handles_;
- // Number of handles that are currently active (ranges between 0 and
- // MAX_SIZE).
-
- ACE_ReactorEx_Token token_;
- // Synchronization token for the MT_SAFE ACE_Reactor.
-
-private:
-
- // Deny access since member-wise won't work...
- ACE_ReactorEx (const ACE_ReactorEx &);
- ACE_ReactorEx &operator = (const ACE_ReactorEx &);
-
- ACE_ReactorEx_Notify notify_handler_;
- // Called when notify is called.
-};
-
-#else /* NOT win32 */
-class ACE_Export ACE_ReactorEx
-{
-public:
- virtual int handle_events (void) { return -1; }
- virtual int handle_events (ACE_Time_Value &) { return -1; }
- int notify (ACE_Event_Handler * = 0,
- ACE_Reactor_Mask = ACE_Event_Handler::EXCEPT_MASK)
- { return 0; }
-};
-
-#endif /* ACE_WIN32 */
-
-#if defined (__ACE_INLINE__)
-#include "ace/ReactorEx.i"
-#endif /* __ACE_INLINE__ */
-#endif /* ACE_REACTOREX_H */