Кажется, что нестатическая функция-член в классе RobotNodes
, и вы, кажется, думаете, что тип функции-члена void (*)()
.Если так, то вы не правы.
Тип нестатического члена-функции и свободной функции не совпадают, даже если они имеют абсолютно одинаковую сигнатуру!
Поэтому я бы предложил вам определить статическийфункция называется start
, как:
class RobotNodes
{
public:
void run(); //define it as you like
static void* start(void *pdata)
{
RobotNodes *robot = static_cast<RobotNodes*>(pdata);
robot->run(); //forward it
return 0; //or return as the documentation says
}
};
Затем используйте start
как:
std::vector<pthread_t> threads(numRobotsToInit);
for(i = 0; i<numRobotsToInit; i++)
{
pthread_create(&threads[i], NULL, RobotNodes::start, &robots[i]);
}
Также обратите внимание, что я создал вектор pthread_t
вне цикла;это связано с тем, что каждый экземпляр thread должен отличаться, если он является другим потоком, и, кроме того, каждый экземпляр должен продолжать существовать даже после остановки цикла.