NAME

ACE_ReactorEx - An object oriented event demultiplexor and event handler ReactorEx for Win32 WaitForMultipleObjects

SYNOPSIS

#include <ace/ReactorEx.h>

class ACE_ReactorEx { public: friend class ACE_ReactorEx_Handler_Repository; friend class ACE_ReactorEx_Test; enum { DEFAULT_SIZE = MAXIMUM_WAIT_OBJECTS - 2 }; ACE_ReactorEx (ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0); ACE_ReactorEx ( size_t size, int unused = 0, ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0 ); static ACE_ReactorEx *instance (void); static ACE_ReactorEx *instance (ACE_ReactorEx *); static void close_singleton (void); static int run_event_loop (void); static int run_event_loop (ACE_Time_Value &tv); static int end_event_loop (void); static sig_atomic_t event_loop_done (void); virtual int open ( size_t size = DEFAULT_SIZE, int restart = 0, ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0 ); virtual int close (void); virtual ~ACE_ReactorEx (void); virtual int handle_events (ACE_Time_Value *max_wait_time = 0); virtual int alertable_handle_events ( ACE_Time_Value *max_wait_time = 0 ); virtual int handle_events (ACE_Time_Value &max_wait_time); virtual int alertable_handle_events ( ACE_Time_Value &max_wait_time ); virtual int register_handler ( ACE_Event_Handler *eh, ACE_HANDLE event_handle = ACE_INVALID_HANDLE ); virtual int register_handler ( ACE_HANDLE event_handle, ACE_HANDLE io_handle, ACE_Event_Handler *eh, ACE_Reactor_Mask mask ); virtual int register_handler ( ACE_HANDLE io_handle, ACE_Event_Handler *eh, ACE_Reactor_Mask mask ); virtual int register_handler ( ACE_Event_Handler *eh, ACE_Reactor_Mask mask ); virtual int register_handler ( const ACE_Handle_Set &handles, ACE_Event_Handler *eh, ACE_Reactor_Mask mask ); virtual int remove_handler ( ACE_Event_Handler *eh, ACE_Reactor_Mask mask = 0 ); virtual int remove_handler ( ACE_HANDLE handle, ACE_Reactor_Mask mask = 0 ); virtual int remove_handler ( const ACE_Handle_Set &handle_set, ACE_Reactor_Mask ); virtual int suspend_handler (ACE_Event_Handler *eh); virtual int suspend_handler (ACE_HANDLE handle); virtual int suspend_handler (const ACE_Handle_Set &handles); virtual int suspend_all (void); virtual int resume_handler (ACE_Event_Handler *eh); virtual int resume_handler (ACE_HANDLE handle); virtual int resume_handler (const ACE_Handle_Set &handles); virtual int resume_all (void); 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 ); virtual int cancel_timer ( ACE_Event_Handler *event_handler, int dont_call_handle_close = 1 ); virtual int cancel_timer ( int timer_id, const void **arg = 0, int dont_call_handle_close = 1 ); virtual int notify ( ACE_Event_Handler * = 0, ACE_Reactor_Mask = ACE_Event_Handler::EXCEPT_MASK, ACE_Time_Value * = 0 ); virtual void max_notify_iterations (int); virtual int max_notify_iterations (void); virtual int owner (ACE_thread_t *owner); virtual int owner ( ACE_thread_t new_owner, ACE_thread_t *old_owner = 0 ); virtual void wakeup_all_threads (void); ACE_ALLOC_HOOK_DECLARE; void dump (void) const; inline virtual int handle_events (void); inline virtual int handle_events (ACE_Time_Value &); inline int notify ( ACE_Event_Handler * = 0, ACE_Reactor_Mask = ACE_Event_Handler::EXCEPT_MASK ); static ACE_ReactorEx *instance (void); static ACE_ReactorEx *instance (ACE_ReactorEx *); static void close_singleton (void); static int run_event_loop (void); static int run_event_loop (ACE_Time_Value &tv); static int end_event_loop (void); static sig_atomic_t event_loop_done (void); protected: virtual int register_handler_i ( ACE_HANDLE event_handle, ACE_HANDLE io_handle, ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask ); virtual int event_handling ( ACE_Time_Value *max_wait_time = 0, int alertable = 0 ); virtual ACE_thread_t owner_i (void); virtual int ok_to_wait ( ACE_Time_Value *max_wait_time, int alertable ); virtual int wait_for_multiple_events ( ACE_Time_Value *max_wait_time, int alertable ); virtual int dispatch (int wait_status); int safe_dispatch (int wait_status); virtual int dispatch_handles (size_t index); virtual int dispatch_handler (int index); virtual int simple_dispatch_handler ( int index, ACE_HANDLE event_handle ); virtual int complex_dispatch_handler ( int index, ACE_HANDLE event_handle ); virtual int upcall ( ACE_Event_Handler *event_handler, ACE_HANDLE io_handle, ACE_HANDLE event_handle, long interested_events ); virtual int calculate_timeout (ACE_Time_Value *time); virtual int update_state (void); virtual int new_owner (void); virtual int change_owner (void); ACE_Timer_Queue *timer_queue_; int delete_timer_queue_; int delete_handler_rep_; ACE_Process_Mutex lock_; ACE_ReactorEx_Handler_Repository handler_rep_; ACE_ReactorEx_Notify notify_handler_; ACE_Manual_Event ok_to_wait_; ACE_Manual_Event wakeup_all_threads_; ACE_Wakeup_All_Threads_Handler wakeup_all_threads_handler_; ACE_Auto_Event waiting_to_change_state_; size_t active_threads_; ACE_thread_t owner_; ACE_thread_t new_owner_; ACE_thread_t change_state_thread_; ACE_HANDLE atomic_wait_array_ [2]; int open_for_business_; private: static ACE_ReactorEx *reactorEx_; static int delete_reactorEx_; static sig_atomic_t end_event_loop_; ACE_ReactorEx (const ACE_ReactorEx &); ACE_ReactorEx &operator = (const ACE_ReactorEx &); };

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.

Initialization and termination methods.

ACE_ReactorEx (ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0);

ACE_ReactorEx (
    size_t size,
    int unused = 0,
    ACE_Sig_Handler * = 0,
    ACE_Timer_Queue * = 0
    );

static ACE_ReactorEx *instance (void);

static ACE_ReactorEx *instance (ACE_ReactorEx *);

static void close_singleton (void);

ReactorEx event loop management methods.

static int run_event_loop (void);

static int run_event_loop (ACE_Time_Value &tv);

static int end_event_loop (void);

static sig_atomic_t event_loop_done (void);

virtual int open (
    size_t size = DEFAULT_SIZE,
    int restart = 0,
    ACE_Sig_Handler * = 0,
    ACE_Timer_Queue * = 0
    );

virtual int close (void);

virtual ~ACE_ReactorEx (void);

Event loop drivers.

virtual int handle_events (ACE_Time_Value *max_wait_time = 0);

virtual int alertable_handle_events (
    ACE_Time_Value *max_wait_time = 0
    );

virtual int handle_events (ACE_Time_Value &max_wait_time);

virtual int alertable_handle_events (ACE_Time_Value &max_wait_time);

Register and remove Handlers.

virtual int register_handler (
    ACE_Event_Handler *eh,
    ACE_HANDLE event_handle = ACE_INVALID_HANDLE
    );

virtual int register_handler (
    ACE_HANDLE event_handle,
    ACE_HANDLE io_handle,
    ACE_Event_Handler *eh,
    ACE_Reactor_Mask mask
    );

virtual int register_handler (
    ACE_HANDLE io_handle,
    ACE_Event_Handler *eh,
    ACE_Reactor_Mask mask
    );

virtual int register_handler (
    ACE_Event_Handler *eh,
    ACE_Reactor_Mask mask
    );

virtual int register_handler (
    const ACE_Handle_Set &handles,
    ACE_Event_Handler *eh,
    ACE_Reactor_Mask mask
    );

virtual int remove_handler (
    ACE_Event_Handler *eh,
    ACE_Reactor_Mask mask = 0
    );

virtual int remove_handler (
    ACE_HANDLE handle,
    ACE_Reactor_Mask mask = 0
    );

virtual int remove_handler (
    const ACE_Handle_Set &handle_set,
    ACE_Reactor_Mask
    );

virtual int suspend_handler (ACE_Event_Handler *eh);

virtual int suspend_handler (ACE_HANDLE handle);

virtual int suspend_handler (const ACE_Handle_Set &handles);

virtual int suspend_all (void);

virtual int resume_handler (ACE_Event_Handler *eh);

virtual int resume_handler (ACE_HANDLE handle);

virtual int resume_handler (const ACE_Handle_Set &handles);

virtual int resume_all (void);

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
    );

virtual int cancel_timer (
    ACE_Event_Handler *event_handler,
    int dont_call_handle_close = 1
    );

virtual int cancel_timer (
    int timer_id,
    const void **arg = 0,
    int dont_call_handle_close = 1
    );

Notification methods.

virtual int notify (
    ACE_Event_Handler * = 0,
    ACE_Reactor_Mask = ACE_Event_Handler::EXCEPT_MASK,
    ACE_Time_Value * = 0
    );

virtual void max_notify_iterations (int);

virtual int max_notify_iterations (void);

virtual int owner (ACE_thread_t *owner);

virtual int owner (
    ACE_thread_t new_owner,
    ACE_thread_t *old_owner = 0
    );

virtual void wakeup_all_threads (void);

ACE_ALLOC_HOOK_DECLARE;

void dump (void) const;

AUTHOR

Irfan Pyarali, Tim Harrison, and Doug Schmidt

LIBRARY

ace