+int wxGUIEventLoop::DispatchTimeout(unsigned long timeout)
+{
+ MSG msg;
+ int rc = GetNextMessageTimeout(&msg, timeout);
+ if ( rc != 1 )
+ return rc;
+
+ ProcessMessage(&msg);
+
+ return 1;
+}
+
+void wxGUIEventLoop::OnNextIteration()
+{
+#if wxUSE_THREADS
+ wxMutexGuiLeaveOrEnter();
+#endif // wxUSE_THREADS
+}
+
+void wxGUIEventLoop::WakeUp()
+{
+ ::PostMessage(NULL, WM_NULL, 0, 0);
+}
+
+#else // !wxUSE_GUI
+
+
+// ============================================================================
+// wxConsoleEventLoop implementation
+// ============================================================================
+
+#if wxUSE_CONSOLE_EVENTLOOP
+
+void wxConsoleEventLoop::WakeUp()
+{
+#if wxUSE_THREADS
+ wxWakeUpMainThread();
+#endif
+}
+
+void wxConsoleEventLoop::ProcessMessage(WXMSG *msg)
+{
+ if ( msg->message == WM_TIMER )
+ {
+ TIMERPROC proc = (TIMERPROC)msg->lParam;
+ if ( proc )
+ (*proc)(NULL, 0, msg->wParam, 0);
+ }
+ else
+ {
+ ::DispatchMessage(msg);
+ }
+}
+
+bool wxConsoleEventLoop::Dispatch()
+{
+ MSG msg;
+ if ( !GetNextMessage(&msg) )
+ return false;
+
+ ProcessMessage(&msg);
+
+ return !m_shouldExit;
+}
+
+int wxConsoleEventLoop::DispatchTimeout(unsigned long timeout)
+{
+ MSG msg;
+ int rc = GetNextMessageTimeout(&msg, timeout);
+ if ( rc != 1 )
+ return rc;
+
+ ProcessMessage(&msg);
+
+ return !m_shouldExit;
+}
+
+#endif // wxUSE_CONSOLE_EVENTLOOP
+
+#endif //wxUSE_GUI