所以我正在尝试使用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 ::转换为*?
提前致谢!
答案 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除非它是由调用者提供的(隐式)。