Improve RoutingWorker utilities
Added an overload to execute_concurrently that takes an std::function as a parameter and added a const version of operator* for rworker_local. Also removed the std::move of the return value in rworker_local::values as it can prevent RVO from taking place.
This commit is contained in:
@ -405,6 +405,7 @@ public:
|
|||||||
* otherwise the task is delivered via the message loop.
|
* otherwise the task is delivered via the message loop.
|
||||||
*/
|
*/
|
||||||
static size_t execute_concurrently(Task& task);
|
static size_t execute_concurrently(Task& task);
|
||||||
|
static size_t execute_concurrently(std::function<void()> func);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Broadcast a message to all worker.
|
* Broadcast a message to all worker.
|
||||||
@ -705,6 +706,12 @@ public:
|
|||||||
return *get_local_value();
|
return *get_local_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Const version of dereference operator
|
||||||
|
const T& operator*() const
|
||||||
|
{
|
||||||
|
return *get_local_value();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assign a value
|
* Assign a value
|
||||||
*
|
*
|
||||||
@ -746,7 +753,7 @@ public:
|
|||||||
RoutingWorker::EXECUTE_AUTO);
|
RoutingWorker::EXECUTE_AUTO);
|
||||||
|
|
||||||
sem.wait_n(n);
|
sem.wait_n(n);
|
||||||
return std::move(rval);
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -780,6 +780,13 @@ size_t RoutingWorker::execute_concurrently(Task& task)
|
|||||||
return sem.wait_n(RoutingWorker::broadcast(&task, &sem));
|
return sem.wait_n(RoutingWorker::broadcast(&task, &sem));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
size_t RoutingWorker::execute_concurrently(std::function<void()> func)
|
||||||
|
{
|
||||||
|
Semaphore sem;
|
||||||
|
return sem.wait_n(RoutingWorker::broadcast(func, &sem, EXECUTE_AUTO));
|
||||||
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
size_t RoutingWorker::broadcast_message(uint32_t msg_id, intptr_t arg1, intptr_t arg2)
|
size_t RoutingWorker::broadcast_message(uint32_t msg_id, intptr_t arg1, intptr_t arg2)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user