#include "wx/private/fdiodispatcher.h"
-class WXDLLIMPEXP_CORE wxEpollDispatcher : public wxFDIODispatcher
+struct epoll_event;
+
+class WXDLLIMPEXP_BASE wxEpollDispatcher : public wxFDIODispatcher
{
public:
- // get pointer to the unique instance of this class, can return NULL if
+ // create a new instance of this class, can return NULL if
// epoll() is not supported on this system
//
- // do not delete the returned pointer
- static wxEpollDispatcher *Get();
+ // the caller should delete the returned pointer
+ static wxEpollDispatcher *Create();
+
+ virtual ~wxEpollDispatcher();
// implement base class pure virtual methods
virtual bool RegisterFD(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 void RunLoop(int timeout = TIMEOUT_INFINITE);
+ virtual bool HasPending() const;
+ virtual int Dispatch(int timeout = TIMEOUT_INFINITE);
private:
- // ctor is private, use Get()
- wxEpollDispatcher();
+ // ctor is private, use Create()
+ wxEpollDispatcher(int epollDescriptor);
+
+ // common part of HasPending() and Dispatch(): calls epoll_wait() with the
+ // given timeout
+ int DoPoll(epoll_event *events, int numEvents, int timeout) const;
- // return true if the object was successfully initialized
- bool IsOk() const { return m_epollDescriptor != -1; }
int m_epollDescriptor;
};