uvw  1.3.0
work.hpp
1 #pragma once
2 
3 
4 #include <functional>
5 #include <utility>
6 #include <memory>
7 #include <uv.h>
8 #include "request.hpp"
9 #include "loop.hpp"
10 
11 
12 namespace uvw {
13 
14 
20 struct WorkEvent {};
21 
22 
37 class WorkReq final: public Request<WorkReq, uv_work_t> {
38  using InternalTask = std::function<void(void)>;
39 
40  static void workCallback(uv_work_t *req) {
41  static_cast<WorkReq*>(req->data)->task();
42  }
43 
44 public:
45  using Task = InternalTask;
46 
47  explicit WorkReq(ConstructorAccess ca, std::shared_ptr<Loop> ref, InternalTask t)
48  : Request{ca, std::move(ref)}, task{t}
49  {}
50 
58  void queue() {
59  invoke(&uv_queue_work, parent(), get(), &workCallback, &defaultCallback<WorkEvent>);
60  }
61 
62 private:
63  Task task{};
64 };
65 
66 
67 }
WorkEvent event.
Definition: work.hpp:20
The WorkReq request.
Definition: work.hpp:37
void queue()
Runs the given task in a separate thread.
Definition: work.hpp:58
uvw default namespace.
Definition: async.hpp:11