31void bind_worker(Object& obj, std::weak_ptr<Object> obj_wp, Delivery deliver)
33 using worker_type =
decltype(obj.worker);
34 auto& tq = score::TaskPool::instance();
36 obj.worker.request = [&tq, obj_wp = std::move(obj_wp),
37 deliver = std::move(deliver)]<
typename... Args>(Args&&... f)
mutable {
38 tq.post([obj_wp, job = deliver.begin(), ... ff = std::forward<Args>(f)]()
mutable {
39 auto deliver = std::move(job);
43 bool needed = bool(obj_wp.lock());
44 if constexpr(
requires { worker_type::must_run(ff...); })
45 needed = needed || worker_type::must_run(ff...);
49 using type_of_result =
decltype(worker_type::work(std::forward<
decltype(ff)>(ff)...));
50 if constexpr(std::is_void_v<type_of_result>)
52 worker_type::work(std::forward<
decltype(ff)>(ff)...);
56 auto res = worker_type::work(std::forward<
decltype(ff)>(ff)...);
61 deliver([obj_wp = std::move(obj_wp), res = std::move(res)]()
mutable {
62 if(
auto o = obj_wp.lock())
void bind_worker(Object &obj, std::weak_ptr< Object > obj_wp, Delivery deliver)
Definition WorkerBinding.hpp:31