c++ - 参数类型不匹配(void*)

标签 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::转换为 * ?

提前致谢!

最佳答案

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/

相关文章:

c++ - 在具有相同参数和兼容返回值的 C++ 方法指针之间进行转换

c++ - 如何在类中使用 unique 函数?

css - 为什么导航类名称是 navbar-default 而不是 navbar

c++ - C++ 中的 RTTI 开销

c++ - 通过传递的指针访问静态方法内部的非静态成员

c++ - 函数将结构返回为 LValue

c++ - 什么是进程和线程?

multithreading - 有关异步IO调用的更多详细信息

.net - 如何停止一个线程直到 n 个线程完成它们的工作

C++ 类变量作用域