From 4010635b9c3d74e544d37d1e9295316cff01b014 Mon Sep 17 00:00:00 2001 From: Pixel Date: Sun, 9 Oct 2011 21:42:24 -0700 Subject: Starting to integrate libev; timer event works. --- includes/Task.h | 17 +++++++++++++++-- includes/TaskMan.h | 6 +++++- 2 files changed, 20 insertions(+), 3 deletions(-) (limited to 'includes') diff --git a/includes/Task.h b/includes/Task.h index c2777fe..f0c1bbb 100644 --- a/includes/Task.h +++ b/includes/Task.h @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -16,14 +17,25 @@ class BaseEvent { public: BaseEvent() : m_signal(false), m_task(NULL) { } bool gotSignal() { return m_signal; } - void doSignal() { m_signal = true; } + void doSignal(); Task * taskWaiting() { Assert(m_task); return m_task; } - void registerOwner(Task * task) { Assert(m_task == NULL); m_task = task; } + void registerOwner(Task * task) { Assert(m_task == NULL); m_task = task; gotOwner(task); } + protected: + virtual void gotOwner(Task * task) { } private: bool m_signal; Task * m_task; }; +class Timeout : public BaseEvent { + public: + Timeout(ev_tstamp tstamp); + void evt_cb(ev::timer & w, int revents); + private: + virtual void gotOwner(Task * task); + ev::timer m_evt; +}; + class TaskEvent : public BaseEvent { public: TaskEvent(Task * taskWaited); @@ -48,6 +60,7 @@ class Task { virtual const char * getName() = 0; Status getStatus() { return m_status; } static Task * getCurrentTask(); + TaskMan * getTaskMan() { return m_taskMan; } protected: void suspend(); virtual void Do() = 0; diff --git a/includes/TaskMan.h b/includes/TaskMan.h index 585fb7f..d8d0c80 100644 --- a/includes/TaskMan.h +++ b/includes/TaskMan.h @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -18,6 +19,8 @@ class TaskMan { void mainLoop(); void stop() { m_stopped = true; } static TaskMan * getTaskMan(); + struct ev_loop * getLoop() { return m_loop; } + void signalTask(Task * t); private: void registerTask(Task * t); @@ -27,9 +30,10 @@ class TaskMan { struct taskHasher { size_t operator()(const Task * t) const { return reinterpret_cast(t); } }; typedef gnu::hash_set taskHash_t; typedef std::vector taskList_t; - taskHash_t m_tasks; + taskHash_t m_tasks, m_signaledTasks; taskList_t m_pendingAdd; volatile bool m_stopped; + struct ev_loop * m_loop; }; }; -- cgit v1.2.3