Le 17/03/13 19:10, Vicente J. Botet
Escriba a écrit :
Le 17/03/13 18:05, Victor Yankee a
écrit :
Hello,
I would like to create a boost thread that can be reused to run
a variety of functions each with different number of args of
different types. I am using C++11 gnu compiler and so maybe a
solution using variadics might work?
I posted to here:
http://stackoverflow.com/questions/15237426/can-a-thread-be-reused-to-run-variadic-functions
But I am not understanding how.
The proposed solution allow you to pass a Callable without
arguments and don't returning anything (void(void)). Using lambdas
or std::bind you are able to call any function with a variable
number of arguments.
loop.postTask([]{foo("task", 0);});
or
loop.postTask(std::bind(foo, "task", 0));
What you don't understand? Are you looking for
loop.postTask(foo, "task", 0);
?
In this case you need to forward these arguments to bind
template <typename F, typename ...Args>
void postTask(F&& f, Args&&... args)
{
std::lock_guard<std::mutex> lock(m_Mutex);
m_Tasks.push(std::bind(std::forward<F>(f),
std::forward<Args>(
args)...));
}
or something like that.
BTW, even if you don't need to store the pending work on a queue,
you need to store the next function and here
std::function<void(void)> could be used also.