made Dispatch() return bool indicating whether we processed any events inside it or if the timeout expired
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@56355 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -67,8 +67,10 @@ public:
|
|||||||
// unregister descriptor previously registered with RegisterFD()
|
// unregister descriptor previously registered with RegisterFD()
|
||||||
virtual bool UnregisterFD(int fd) = 0;
|
virtual bool UnregisterFD(int fd) = 0;
|
||||||
|
|
||||||
// wait for an event for at most timeout milliseconds and process it
|
// wait for an event for at most timeout milliseconds and process it;
|
||||||
virtual void Dispatch(int timeout = TIMEOUT_INFINITE) = 0;
|
// return true if we processed any events or false if timeout expired
|
||||||
|
// without anything happening
|
||||||
|
virtual bool Dispatch(int timeout = TIMEOUT_INFINITE) = 0;
|
||||||
|
|
||||||
virtual ~wxFDIODispatcher() { }
|
virtual ~wxFDIODispatcher() { }
|
||||||
};
|
};
|
||||||
|
@@ -91,14 +91,15 @@ public:
|
|||||||
virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
|
virtual bool RegisterFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
|
||||||
virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
|
virtual bool ModifyFD(int fd, wxFDIOHandler *handler, int flags = wxFDIO_ALL);
|
||||||
virtual bool UnregisterFD(int fd);
|
virtual bool UnregisterFD(int fd);
|
||||||
virtual void Dispatch(int timeout = TIMEOUT_INFINITE);
|
virtual bool Dispatch(int timeout = TIMEOUT_INFINITE);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// common part of RegisterFD() and ModifyFD()
|
// common part of RegisterFD() and ModifyFD()
|
||||||
bool DoUpdateFDAndHandler(int fd, wxFDIOHandler *handler, int flags);
|
bool DoUpdateFDAndHandler(int fd, wxFDIOHandler *handler, int flags);
|
||||||
|
|
||||||
// call the handlers for the fds present in the given sets
|
// call the handlers for the fds present in the given sets, return true if
|
||||||
void ProcessSets(const wxSelectSets& sets);
|
// we called any handlers
|
||||||
|
bool ProcessSets(const wxSelectSets& sets);
|
||||||
|
|
||||||
// helper of ProcessSets(): call the handler if its fd is in the set
|
// helper of ProcessSets(): call the handler if its fd is in the set
|
||||||
void DoProcessFD(int fd, const fd_set& fds, wxFDIOHandler *handler,
|
void DoProcessFD(int fd, const fd_set& fds, wxFDIOHandler *handler,
|
||||||
|
@@ -190,8 +190,9 @@ bool wxSelectDispatcher::UnregisterFD(int fd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSelectDispatcher::ProcessSets(const wxSelectSets& sets)
|
bool wxSelectDispatcher::ProcessSets(const wxSelectSets& sets)
|
||||||
{
|
{
|
||||||
|
bool gotEvent = false;
|
||||||
for ( int fd = 0; fd <= m_maxFD; fd++ )
|
for ( int fd = 0; fd <= m_maxFD; fd++ )
|
||||||
{
|
{
|
||||||
if ( !sets.HasFD(fd) )
|
if ( !sets.HasFD(fd) )
|
||||||
@@ -204,11 +205,15 @@ void wxSelectDispatcher::ProcessSets(const wxSelectSets& sets)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gotEvent = true;
|
||||||
|
|
||||||
sets.Handle(fd, *handler);
|
sets.Handle(fd, *handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return gotEvent;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxSelectDispatcher::Dispatch(int timeout)
|
bool wxSelectDispatcher::Dispatch(int timeout)
|
||||||
{
|
{
|
||||||
struct timeval tv,
|
struct timeval tv,
|
||||||
*ptv;
|
*ptv;
|
||||||
@@ -240,8 +245,12 @@ void wxSelectDispatcher::Dispatch(int timeout)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ProcessSets(sets);
|
if ( ProcessSets(sets) )
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// nothing happened
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_SELECT_DISPATCHER
|
#endif // wxUSE_SELECT_DISPATCHER
|
||||||
|
@@ -158,7 +158,7 @@ bool wxEpollDispatcher::UnregisterFD(int fd)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxEpollDispatcher::Dispatch(int timeout)
|
bool wxEpollDispatcher::Dispatch(int timeout)
|
||||||
{
|
{
|
||||||
epoll_event events[16];
|
epoll_event events[16];
|
||||||
|
|
||||||
@@ -176,10 +176,11 @@ void wxEpollDispatcher::Dispatch(int timeout)
|
|||||||
{
|
{
|
||||||
wxLogSysError(_("Waiting for IO on epoll descriptor %d failed"),
|
wxLogSysError(_("Waiting for IO on epoll descriptor %d failed"),
|
||||||
m_epollDescriptor);
|
m_epollDescriptor);
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool gotEvents = false;
|
||||||
for ( epoll_event *p = events; p < events + e_num; p++ )
|
for ( epoll_event *p = events; p < events + e_num; p++ )
|
||||||
{
|
{
|
||||||
wxFDIOHandler * const handler = (wxFDIOHandler *)(p->data.ptr);
|
wxFDIOHandler * const handler = (wxFDIOHandler *)(p->data.ptr);
|
||||||
@@ -199,7 +200,13 @@ void wxEpollDispatcher::Dispatch(int timeout)
|
|||||||
handler->OnWriteWaiting();
|
handler->OnWriteWaiting();
|
||||||
else if ( p->events & EPOLLERR )
|
else if ( p->events & EPOLLERR )
|
||||||
handler->OnExceptionWaiting();
|
handler->OnExceptionWaiting();
|
||||||
|
else
|
||||||
|
continue;
|
||||||
|
|
||||||
|
gotEvents = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return gotEvents;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // wxUSE_EPOLL_DISPATCHER
|
#endif // wxUSE_EPOLL_DISPATCHER
|
||||||
|
Reference in New Issue
Block a user