added wxFDIODispatcher::HasPending() and implemented correctly wxConsoleEventLoop::Pending() using it to fix the pending events processing in console event loop based programs; also changed wxFDIODispatcher::Dispatch() return type/value to be able to indicate the errors

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@57804 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2009-01-03 01:21:24 +00:00
parent 247b70c6c7
commit a12698abb7
6 changed files with 105 additions and 52 deletions

View File

@@ -85,7 +85,7 @@ void wxConsoleEventLoop::PipeIOHandler::WakeUp()
void wxConsoleEventLoop::PipeIOHandler::OnReadWaiting()
{
// got wakeup from child thread: read all data available in pipe just to
// make it empty (evevn though we write one byte at a time from WakeUp(),
// make it empty (even though we write one byte at a time from WakeUp(),
// it could have been called several times)
char buf[4];
for ( ;; )
@@ -107,7 +107,9 @@ void wxConsoleEventLoop::PipeIOHandler::OnReadWaiting()
}
}
wxTheApp->ProcessPendingEvents();
// writing to the wake up pipe will make wxConsoleEventLoop return from
// wxFDIODispatcher::Dispatch() it might be currently blocking in, nothing
// else needs to be done
}
// ===========================================================================
@@ -144,7 +146,17 @@ wxConsoleEventLoop::wxConsoleEventLoop()
bool wxConsoleEventLoop::Pending() const
{
return wxTheApp->HasPendingEvents();
if ( m_dispatcher->HasPending() )
return true;
#if wxUSE_TIMER
wxUsecClock_t nextTimer;
if ( wxTimerScheduler::Get().GetNext(&nextTimer) &&
!wxMilliClockToLong(nextTimer) )
return true;
#endif // wxUSE_TIMER
return false;
}
bool wxConsoleEventLoop::Dispatch()
@@ -167,7 +179,7 @@ int wxConsoleEventLoop::DispatchTimeout(unsigned long timeout)
}
#endif // wxUSE_TIMER
bool hadEvent = m_dispatcher->Dispatch(timeout);
bool hadEvent = m_dispatcher->Dispatch(timeout) > 0;
#if wxUSE_TIMER
if ( wxTimerScheduler::Get().NotifyExpired() )