diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-04-14 19:52:21 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-04-14 23:45:11 +0200 |
commit | ab36fbffef977b99cc03d0b77ac37bdc1b5705dc (patch) | |
tree | 17207a364eecee330a26ac117a1384ad0b4a1e97 /include/AsyncTask.hpp | |
parent | 4db0876f45533d3b55ee79df2d2bc78b789b5a28 (diff) |
Rework manga plugins downloading.. preparing for parallel downloads
Diffstat (limited to 'include/AsyncTask.hpp')
-rw-r--r-- | include/AsyncTask.hpp | 22 |
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: |