【发布时间】:2016-09-08 13:05:17
【问题描述】:
我正在尝试在主函数中创建一个线程并通过我的线程调用另一个类的函数。
在 main.cpp 中:
SocketHandler *callserver;
pthread_t thread1;
pthread_create(&thread1,0, callserver->createSocket,NULL);
在 SocketHandler.h 中:
void* createSocket();
在 SocketHandler.cpp 中:
void * SocketHandler::createSocket()
{
//....
}
当我尝试编译 main.cpp 时出现错误
cannot convert SocketHandler::createSocket from type void* (SocketHandler::)() to type void* ( * )(void*)
【问题讨论】:
-
非静态成员函数不能用作简单的线程函数。您需要一个静态成员函数或非成员函数。哦,当然,无论你使用什么函数,它实际上都需要一个
void*参数。或者你当然可以顺应时代潮流,开始使用std::thread。 -
如果你有 C++11 或更高版本,我建议你使用库提供的
std::thread,这样你就不必为void*s 搞砸了。 -
@NathanOliver 或在 C++11 之前使用
boost::thread
标签: c++ pthreads type-conversion