aboutsummaryrefslogtreecommitdiff
path: root/include/AsyncTask.hpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-04-14 19:52:21 +0200
committerdec05eba <dec05eba@protonmail.com>2021-04-14 23:45:11 +0200
commitab36fbffef977b99cc03d0b77ac37bdc1b5705dc (patch)
tree17207a364eecee330a26ac117a1384ad0b4a1e97 /include/AsyncTask.hpp
parent4db0876f45533d3b55ee79df2d2bc78b789b5a28 (diff)
Rework manga plugins downloading.. preparing for parallel downloads
Diffstat (limited to 'include/AsyncTask.hpp')
-rw-r--r--include/AsyncTask.hpp22
1 files changed, 7 insertions, 15 deletions
diff --git a/include/AsyncTask.hpp b/include/AsyncTask.hpp
index abdc0f8..6148923 100644
--- a/include/AsyncTask.hpp
+++ b/include/AsyncTask.hpp
@@ -5,25 +5,17 @@
#include <future>
namespace QuickMedia {
- template <typename T>
+ template <class T, class... Args>
class AsyncTask {
public:
- using CallbackFunc = std::function<T()>;
+ using CallbackFunc = std::function<T(Args&&... args)>;
AsyncTask() = default;
- AsyncTask(CallbackFunc callback_func) {
+ AsyncTask(CallbackFunc callback_func, Args&&... args) {
std::promise<T> promise;
future = promise.get_future();
- thread = std::thread(&AsyncTask::thread_handler, this, std::move(promise), std::move(callback_func));
- }
-
- AsyncTask& operator=(CallbackFunc callback_func) {
- cancel();
- std::promise<T> promise;
- future = promise.get_future();
- thread = std::thread(&AsyncTask::thread_handler, this, std::move(promise), std::move(callback_func));
- return *this;
+ thread = std::thread(&AsyncTask::thread_handler, this, std::move(promise), std::move(callback_func), std::forward<Args>(args)...);
}
AsyncTask(AsyncTask &&other) {
@@ -63,12 +55,12 @@ namespace QuickMedia {
}
}
private:
- void thread_handler(std::promise<T> &&promise, CallbackFunc callback_func) {
+ void thread_handler(std::promise<T> &&promise, CallbackFunc callback_func, Args&&... args) {
if constexpr(std::is_same<T, void>::value) {
- callback_func();
+ callback_func(std::forward<Args>(args)...);
promise.set_value();
} else {
- promise.set_value(callback_func());
+ promise.set_value(callback_func(std::forward<Args>(args)...));
}
}
private: