executor/fibers/scheduler/exe/executors/execute.hpp

43 lines
741 B
C++
Raw Permalink Normal View History

2024-04-22 15:02:31 +00:00
#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