diff options
Diffstat (limited to 'ace/Msg_WFMO_Reactor.h')
-rw-r--r-- | ace/Msg_WFMO_Reactor.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/ace/Msg_WFMO_Reactor.h b/ace/Msg_WFMO_Reactor.h new file mode 100644 index 00000000000..a2c26f2e9f3 --- /dev/null +++ b/ace/Msg_WFMO_Reactor.h @@ -0,0 +1,107 @@ +/* -*- C++ -*- */ +// $Id$ +// ============================================================================ +// +// = LIBRARY +// ace +// +// = FILENAME +// Msg_WFMO_Reactor.h +// +// = AUTHOR +// Beskrovny Evgeny, Comverse Network Systems +// Irfan Pyarali +// +// ============================================================================ + +#if !defined (ACE_MSG_WFMO_REACTOR_H) +#define ACE_MSG_WFMO_REACTOR_H + +#include "ace/WFMO_Reactor.h" + +#if defined (ACE_WIN32) + +class ACE_Export ACE_Msg_WFMO_Reactor : public ACE_WFMO_Reactor +{ + // + // = TITLE + // + // An object oriented event demultiplexor and event handler + // Msg_WFMO_Reactor for Win32 MsgWaitForMultipleObjects. + // + // = DESCRIPTION + // + // The ACE_Msg_WFMO_Reactor is an object-oriented event + // demultiplexor and event handler Reactor. It differs from + // WFMO_Reactor by its ability to react on Windows messages. It + // is needed when the task should serve also as a COM/DCOM + // server. + // +public: + // = Initialization and termination methods. + ACE_Msg_WFMO_Reactor (ACE_Sig_Handler * = 0, + ACE_Timer_Queue * = 0); + // Initialize <ACE_Msg_WFMO_Reactor> with the default size. + + ACE_Msg_WFMO_Reactor (size_t size, + int unused = 0, + ACE_Sig_Handler * = 0, + ACE_Timer_Queue * = 0); + // Initialize <ACE_Msg_WFMO_Reactor> with size <size>. Two slots will be + // added to the <size> parameter which will store handles used for + // internal management purposes. + + virtual ~ACE_Msg_WFMO_Reactor (void); + // Close down the ACE_Msg_WFMO_Reactor and release all of its resources. + + virtual int handle_events (ACE_Time_Value *max_wait_time = 0); + virtual int alertable_handle_events (ACE_Time_Value *max_wait_time = 0); + // This event loop driver blocks for up to <max_wait_time> before + // returning. It will return earlier if timer events, I/O events, + // window events, or signal events occur. Note that <max_wait_time> + // can be 0, in which case this method blocks indefinitely until + // events occur. + // + // <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. + // + // <MsgWaitForMultipleObjects> is used as the demultiplexing call + // + // Returns the total number of <ACE_Event_Handler>s that were + // dispatched, 0 if the <max_wait_time> elapsed without dispatching + // any handlers, or -1 if an error occurs. + // + // The only difference between <alertable_handle_events> and + // <handle_events> is that in the alertable case, MWMO_ALERTABLE is + // passed to <MsgWaitForMultipleObjects> for the <bAlertable> + // option. + + virtual int handle_events (ACE_Time_Value &max_wait_time); + virtual int alertable_handle_events (ACE_Time_Value &max_wait_time); + // This method is just like the one above, except the + // <max_wait_time> value is a reference and can therefore never be + // NULL. + +protected: + virtual int wait_for_multiple_events (int timeout, + int alertable); + // Wait for timer and I/O events to occur. + + virtual DWORD poll_remaining_handles (size_t index); + // Check for activity on remaining handles. + + virtual int dispatch_window_messages (void); + // Dispatches window messages. +}; + +#endif /* ACE_WIN32 */ + +#if defined (__ACE_INLINE__) +#include "ace/Msg_WFMO_Reactor.i" +#endif /* __ACE_INLINE__ */ + +#endif /* ACE_MSG_WFMO_REACTOR_H */ |