/* -*- C++ -*- */ //============================================================================= /** * @file Msg_WFMO_Reactor.h * * $Id$ * * @author Beskrovny Evgeny * @author Irfan Pyarali */ //============================================================================= #ifndef ACE_MSG_WFMO_REACTOR_H #define ACE_MSG_WFMO_REACTOR_H #include "ace/pre.h" #include "ace/WFMO_Reactor.h" #if !defined (ACE_LACKS_PRAGMA_ONCE) # pragma once #endif /* ACE_LACKS_PRAGMA_ONCE */ #if defined (ACE_WIN32) && !defined (ACE_LACKS_MSG_WFMO) /** * @class ACE_Msg_WFMO_Reactor * * @brief An OO event demultiplexor and event handler dispatcher for * Win32 . * * The ACE_Msg_WFMO_Reactor is an OO event demultiplexor and * event handler Reactor. It differs from by * its ability to react on Windows messages. It is needed when * the task should serve also as a COM/DCOM server. */ class ACE_Export ACE_Msg_WFMO_Reactor : public ACE_WFMO_Reactor { public: // = Initialization and termination methods. /// Initialize with the default size. ACE_Msg_WFMO_Reactor (ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0); /** * Initialize with size . Two slots will be * added to the parameter which will store handles used for * internal management purposes. */ ACE_Msg_WFMO_Reactor (size_t size, int unused = 0, ACE_Sig_Handler * = 0, ACE_Timer_Queue * = 0); /// Close down the ACE_Msg_WFMO_Reactor and release all of its resources. virtual ~ACE_Msg_WFMO_Reactor (void); /** * This event loop driver blocks for up to before * returning. It will return earlier if timer events, I/O events, * window events, or signal events occur. Note that * can be 0, in which case this method blocks indefinitely until * events occur. * * 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, * will equal 1 second. This can be used if an * application wishes to handle events for some fixed amount of * time. * * is used as the demultiplexing call * * Returns the total number of s that were * dispatched, 0 if the elapsed without dispatching * any handlers, or -1 if an error occurs. * * The only difference between and * is that in the alertable case, MWMO_ALERTABLE is * passed to for the * option. */ virtual int handle_events (ACE_Time_Value *max_wait_time = 0); virtual int alertable_handle_events (ACE_Time_Value *max_wait_time = 0); /** * This method is just like the one above, except the * value is a reference and can therefore never be * NULL. */ virtual int handle_events (ACE_Time_Value &max_wait_time); virtual int alertable_handle_events (ACE_Time_Value &max_wait_time); protected: /// Wait for timer and I/O events to occur. virtual int wait_for_multiple_events (int timeout, int alertable); /// Check for activity on remaining handles. virtual DWORD poll_remaining_handles (size_t index); /// Dispatches window messages. virtual int dispatch_window_messages (void); }; #endif /* ACE_WIN32 && !ACE_LACKS_MSG_WFMO */ #if defined (__ACE_INLINE__) #include "ace/Msg_WFMO_Reactor.i" #endif /* __ACE_INLINE__ */ #include "ace/post.h" #endif /* ACE_MSG_WFMO_REACTOR_H */