WorkReq review
This commit is contained in:
parent
8973f55bea
commit
a6e67f061d
@ -17,24 +17,26 @@ struct WorkEvent: Event<WorkEvent> { };
|
||||
|
||||
|
||||
class WorkReq final: public Request<WorkReq, uv_work_t> {
|
||||
using InternalTask = std::function<void(void)>;
|
||||
|
||||
static void workCallback(uv_work_t *req) {
|
||||
static_cast<WorkReq*>(req->data)->task();
|
||||
}
|
||||
|
||||
using Request::Request;
|
||||
explicit WorkReq(std::shared_ptr<Loop> ref, InternalTask t)
|
||||
: Request{std::move(ref)}, task{t}
|
||||
{ }
|
||||
|
||||
public:
|
||||
using Task = std::function<void(void)>;
|
||||
using Task = InternalTask;
|
||||
|
||||
template<typename... Args>
|
||||
static std::shared_ptr<WorkReq> create(Args&&... args) {
|
||||
return std::shared_ptr<WorkReq>{new WorkReq{std::forward<Args>(args)...}};
|
||||
}
|
||||
|
||||
void queue(Task t) {
|
||||
if(0 == invoke(&uv_queue_work, parent(), get<uv_work_t>(), &workCallback, &defaultCallback<uv_work_t, WorkEvent>)) {
|
||||
task = std::move(t);
|
||||
}
|
||||
void queue() {
|
||||
invoke(&uv_queue_work, parent(), get<uv_work_t>(), &workCallback, &defaultCallback<uv_work_t, WorkEvent>);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@ -15,7 +15,7 @@ TEST(Loop, Basics) {
|
||||
|
||||
auto loop = uvw::Loop::create();
|
||||
auto handle = loop->resource<uvw::PrepareHandle>();
|
||||
auto req = loop->resource<uvw::WorkReq>();
|
||||
auto req = loop->resource<uvw::WorkReq>([](){});
|
||||
|
||||
auto err = [](uvw::ErrorEvent, auto &) { ASSERT_TRUE(false); };
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user