#c #multithreading #boost #callable
#c #многопоточность #увеличить #вызываемый
Вопрос:
В boost::thread возможно ли вызвать метод класса, не делая класс вызываемым и не реализуя оператор void()(), как при простом вызове метода класса
for(int i=0;i<5;i )
boost::thread worker(myclass.myfunc,i,param2);
Я получаю сообщение об ошибке <unresolved overloaded function type>
На самом деле я бы предпочел знать то же самое для zi::thread
Ответ №1:
boost::thread
не нужно ничего особенного, оно будет работать именно так, как вы хотите (за вычетом синтаксических ошибок):
for (int i = 0; i != 5; i)
boost::thread worker(amp;myclass::myfunc, myclassPointer, i, param2);
template <class F,class A1,class A2,...>
thread(F f,A1 a1,A2 a2,...);
Эффекты: Как будто
thread(boost::bind(f, a1, a2, ...))
. Следовательно,f
и каждыйaN
из них копируются во внутреннюю память для доступа к новому потоку.
Комментарии:
1. Я думаю, это работает, только если myclass::myfunc является статической функцией-членом. Вы должны передать объект класса, чтобы вызвать функцию-член класса.
2. @msh : Правильно, точно так же, как вы бы сделали с boost.bind. Не уверен, к чему вы клоните…
3. Я пытаюсь сказать, что вы не можете использовать в качестве boost::thread worker(amp;myclass::myfunc, i, param2), если myclass::myfunc не является статической функцией-членом (и это не будет компилироваться).
Ответ №2:
Для boost::thread вы можете использовать boost::bind для вызова функции-члена класса.
myclass obj;
for(int i=0;i<5;i )
boost::thread worker(boost::bind(amp;myclass::myfunc,amp;obj,i,param2));