DispatchQueueEfl.h [plain text]
#ifndef DispatchQueueEfl_h
#define DispatchQueueEfl_h
#include <functional>
#include <time.h>
#include <wtf/ThreadSafeRefCounted.h>
#include <wtf/ThreadingPrimitives.h>
#include <wtf/Vector.h>
class TimerWorkItem;
class WorkItem;
class DispatchQueue : public ThreadSafeRefCounted<DispatchQueue> {
public:
static PassRefPtr<DispatchQueue> create(const char* name);
~DispatchQueue();
void dispatch(std::unique_ptr<WorkItem>);
void dispatch(std::unique_ptr<TimerWorkItem>);
void stopThread();
void setSocketEventHandler(int, std::function<void ()>);
void clearSocketEventHandler();
private:
class ThreadContext;
DispatchQueue();
void performWork();
void performTimerWork();
void performFileDescriptorWork();
void insertTimerWorkItem(std::unique_ptr<TimerWorkItem>);
void dispatchQueueThread();
void wakeUpThread();
timeval* getNextTimeOut() const;
fd_set m_fileDescriptorSet;
int m_maxFileDescriptor;
int m_readFromPipeDescriptor;
int m_writeToPipeDescriptor;
Mutex m_writeToPipeDescriptorLock;
bool m_isThreadRunning;
int m_socketDescriptor;
std::function<void ()> m_socketEventHandler;
Vector<std::unique_ptr<WorkItem>> m_workItems;
Mutex m_workItemsLock;
Vector<std::unique_ptr<TimerWorkItem>> m_timerWorkItems;
mutable Mutex m_timerWorkItemsLock;
};
#endif // DispatchQueueEfl_h