参数类型不匹配(void *)

时间:2013-11-25 18:48:04

标签: c++ multithreading class casting

所以我正在尝试使用pthread_create但是我正在

error: argument of type ‘void* (server::)(void*)’ does not match ‘void* (*)(void*)’

该类定义如下:

class server : public AL::ALModule
{
  public:
  server(boost::shared_ptr<AL::ALBroker> pBroker, const std::string& pName);
  ....
  void *ThreadMain(void *arg);               
}

};

这是我正在调用pthread的函数:

int server::listen() {

TCPServerSocket servSock(6004);
...

for (;;) {     

  clntSock = servSock.accept();
  ...
  pthread_t threadID;         
  pthread_create(&threadID, NULL, this->ThreadMain,(void *) clntSock);
  ...
  }
}

如何将ThreadMain从server ::转换为*?

提前致谢!

1 个答案:

答案 0 :(得分:1)

void *ThreadMain(void* arg)

应该是

static void ThreadMain(void* arg)

和调用:

pthread_create(&threadID, NULL, &(server::ThreadMain), (void *) clntSock);

您正在创建的主题无法知道您的this指针是什么; C ++试图通过让您确认ThreadMain是静态的并且无法访问非静态属性来保护您免受此事实的影响。

使用&(this->anyFunc)的问题是,如果this不是函数指针或虚函数,this没有对它的方法的实际引用,方法本身也没有对相应的{{1除非它是由调用者提供的(隐式)。