увеличить количество вызовов метода класса

#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);
  

Из документов boost.thread:

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));