summaryrefslogtreecommitdiff
path: root/includes/Task.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Task.h')
-rw-r--r--includes/Task.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/includes/Task.h b/includes/Task.h
index e8aea70..dcbdf91 100644
--- a/includes/Task.h
+++ b/includes/Task.h
@@ -1,6 +1,7 @@
#pragma once
#include <stdlib.h>
+#include <functional>
#ifndef _WIN32
#include <coro.h>
#endif
@@ -260,6 +261,27 @@ class QueueBase {
pthread_cond_t m_cond;
};
+template<class R>
+struct Future {
+ typedef std::function<R()> func_t;
+ R get();
+ func_t m_run;
+};
+
+template<class R>
+R Future<R>::get() {
+ R r;
+ for (;;) {
+ try {
+ r = m_run();
+ return r;
+ }
+ catch (EAgain & e) {
+ Task::operationYield(e.getEvent(), Task::INTERRUPTIBLE);
+ }
+ }
+}
+
template<class T>
class Queue : public QueueBase {
public: