43 lines
741 B
C++
43 lines
741 B
C++
#pragma once
|
|
|
|
#include <exe/executors/executor.hpp>
|
|
|
|
#include <cstdlib>
|
|
|
|
namespace exe::executors {
|
|
|
|
namespace detail {
|
|
template <typename T>
|
|
struct TaskBaseFunction : TaskBase {
|
|
explicit TaskBaseFunction(T&& task) : task_(std::move(task)) {
|
|
}
|
|
|
|
void Run() noexcept override {
|
|
try {
|
|
task_();
|
|
} catch (...) {
|
|
}
|
|
Discard();
|
|
}
|
|
|
|
void Discard() noexcept override {
|
|
delete this;
|
|
}
|
|
|
|
private:
|
|
T task_;
|
|
};
|
|
} // namespace detail
|
|
|
|
/*
|
|
* Usage:
|
|
* Execute(thread_pool, []() {
|
|
* std::cout << "Hi" << std::endl;
|
|
* });
|
|
*/
|
|
|
|
template <typename F>
|
|
void Execute(IExecutor& where, F&& f, Hint hint = Hint::UpToYou) {
|
|
where.Execute(new detail::TaskBaseFunction(std::move(f)), hint);
|
|
}
|
|
} // namespace exe::executors
|