You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I assume the answer is "no" of course, but, before I make that conclusion, I would prefer asking in here :). Can I somehow have a member-method (non-static) be my executed function when submitting?
Thanks!
The text was updated successfully, but these errors were encountered:
ClassNameclassInstance;
// Creates a copy of classInstace, use std::ref(classInstance) to force pass by ref
auto function=std::bind(&ClassName::AddOne, classInstance, 3);
auto future=pool.submit(function);
// Get result, should be equals to 4 (3+1)intresult=future.get();
std::cout << "Last operation result is equals to " << result << std::endl;
I'll add this example to the readme whenever I have some time. Thanks for pointing that out.
PS: If you dont like std::bind you can also use lambdas.
I was using your thread pool implementation. And I implemented a method to address this in a different way. I post here if it helps:
template<typename F, class T, class T1, typename...Args>
auto submit(F T::*f, T1 *obj, Args&&... args) -> std::future<decltype((std::declval<T>().*f)(args...))>
{
// Create a function with bounded parameters ready to execute
std::function<decltype((std::declval<T>().*f)(args...))()> func = [=] ()
{
(obj->*f)(args...);
};
// Encapsulate it into a shared ptr in order to be able to copy construct / assign
auto task_ptr = std::make_shared<std::packaged_task<decltype((std::declval<T>().*f)(args...))()>>(func);
// Wrap packaged task into void function
std::function<void()> wrapper_func = [task_ptr]() {
(*task_ptr)();
};
// Enqueue generic wrapper function
m_queue.enqueue(wrapper_func);
// Wake up one thread if its waiting
m_conditional_lock.notify_one();
// Return future from promise
return task_ptr->get_future();
}
By the way, thank you for your library, you really did a good work!
Hi,
I assume the answer is "no" of course, but, before I make that conclusion, I would prefer asking in here :). Can I somehow have a member-method (non-static) be my executed function when submitting?
Thanks!
The text was updated successfully, but these errors were encountered: