summaryrefslogtreecommitdiff
path: root/src/Task.cc
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2011-10-09 21:42:24 -0700
committerPixel <pixel@nobis-crew.org>2011-10-09 21:59:27 -0700
commit4010635b9c3d74e544d37d1e9295316cff01b014 (patch)
treed7fe054af931604fcb7a7ff1f759ddd3281b81a3 /src/Task.cc
parent74adacf6ec1de10b623112605b5d9610163522ec (diff)
Starting to integrate libev; timer event works.
Diffstat (limited to 'src/Task.cc')
-rw-r--r--src/Task.cc20
1 files changed, 19 insertions, 1 deletions
diff --git a/src/Task.cc b/src/Task.cc
index 73a2329..e5c971d 100644
--- a/src/Task.cc
+++ b/src/Task.cc
@@ -67,9 +67,27 @@ Balau::Task * Balau::Task::getCurrentTask() {
void Balau::Task::waitFor(Balau::Events::BaseEvent * e) {
e->registerOwner(this);
- // probably have to register the event in the Task manager
+}
+
+void Balau::Events::BaseEvent::doSignal() {
+ m_signal = true;
+ m_task->getTaskMan()->signalTask(m_task);
}
Balau::Events::TaskEvent::TaskEvent(Task * taskWaited) : m_taskWaited(taskWaited) {
m_taskWaited->m_waitedBy.push_back(this);
}
+
+Balau::Events::Timeout::Timeout(ev_tstamp tstamp) {
+ m_evt.set<Timeout, &Timeout::evt_cb>(this);
+ m_evt.set(tstamp);
+}
+
+void Balau::Events::Timeout::gotOwner(Task * task) {
+ m_evt.set(task->getTaskMan()->getLoop());
+ m_evt.start();
+}
+
+void Balau::Events::Timeout::evt_cb(ev::timer & w, int revents) {
+ doSignal();
+}