diff options
Diffstat (limited to 'ACE/ace/Msg_WFMO_Reactor.cpp')
-rw-r--r-- | ACE/ace/Msg_WFMO_Reactor.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/ACE/ace/Msg_WFMO_Reactor.cpp b/ACE/ace/Msg_WFMO_Reactor.cpp new file mode 100644 index 00000000000..251d6475a34 --- /dev/null +++ b/ACE/ace/Msg_WFMO_Reactor.cpp @@ -0,0 +1,85 @@ +// $Id$ + +#include "ace/Msg_WFMO_Reactor.h" + + + +#if defined (ACE_WIN32) && !defined (ACE_LACKS_MSG_WFMO) + +#if !defined (__ACE_INLINE__) +#include "ace/Msg_WFMO_Reactor.inl" +#endif /* __ACE_INLINE__ */ + +ACE_BEGIN_VERSIONED_NAMESPACE_DECL + +ACE_Msg_WFMO_Reactor::ACE_Msg_WFMO_Reactor (ACE_Sig_Handler *sh, + ACE_Timer_Queue *tq) + : ACE_WFMO_Reactor (sh, tq) +{ +} + +ACE_Msg_WFMO_Reactor::ACE_Msg_WFMO_Reactor (size_t size, + int unused, + ACE_Sig_Handler *sh, + ACE_Timer_Queue *tq) + : ACE_WFMO_Reactor (size, unused, sh, tq) +{ +} + +ACE_Msg_WFMO_Reactor::~ACE_Msg_WFMO_Reactor (void) +{ +} + +DWORD +ACE_Msg_WFMO_Reactor::wait_for_multiple_events (int timeout, + int alertable) +{ + // Wait for any of handles_ to be active, or until timeout expires. + // If <alertable> is enabled allow asynchronous completion of + // ReadFile and WriteFile operations. QS_ALLINPUT allows + // <MsgWaitForMultipleObjectsEx> to wait for any message is in the + // queue. + return ::MsgWaitForMultipleObjectsEx (this->handler_rep_.max_handlep1 (), + this->handler_rep_.handles (), + timeout, + QS_ALLINPUT, + alertable); +} + +int +ACE_Msg_WFMO_Reactor::dispatch_window_messages (void) +{ + int number_of_messages = 0; + MSG msg; + + // Process all pending message from this thread's message queue + while (::PeekMessage (&msg, 0, 0, 0, PM_REMOVE)) + { + ::TranslateMessage (&msg); + if (msg.message == WM_QUIT) + { + // Should inform the main thread + ::PostQuitMessage (LOWORD (msg.wParam)); + return -1; + } + + ::DispatchMessage (&msg); + ++number_of_messages; + } + + return number_of_messages; +} + +DWORD +ACE_Msg_WFMO_Reactor::poll_remaining_handles (DWORD slot) +{ + return ::MsgWaitForMultipleObjects (this->handler_rep_.max_handlep1 () - slot, + this->handler_rep_.handles () + slot, + FALSE, + 0, + QS_ALLINPUT); +} + +ACE_END_VERSIONED_NAMESPACE_DECL + +#endif /* ACE_WIN32 && !ACE_LACKS_MSG_WFMO */ |