所以我正在尝试使用 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::转换为 * ?
提前致谢!
最佳答案
void *ThreadMain(void* arg)
应该是
static void ThreadMain(void* arg)
和调用:
pthread_create(&threadID, NULL, &(server::ThreadMain), (void *) clntSock);
您正在创建的线程无法知道您的this
指针是什么; C++ 试图通过让您承认 ThreadMain
是静态的并且无法访问非静态属性来保护您免受这一事实的影响。
使用 &(this->anyFunc)
的问题是 this
没有对其方法的实际引用,如果它们不是函数指针或虚拟的,也不是方法本身有任何对相应 this
的引用,除非它是由调用者(隐式)提供的。
关于c++ - 参数类型不匹配(void*),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20200824/