我正在做一个C ++类,在内部,我想创建一个线程来执行该类的功能,我该怎么做?我给你看一些代码。
我希望在一个帖子中运行的成员函数:
void SocketServer::runServer(){
bool connected;
tcp::acceptor a(io_service, tcp::endpoint(tcp::v4(), puerto));
std::string data;
while(seguirFuncionando()){
miSocket = new tcp::socket(io_service);
std::cout << "Waiting for connection...\n";
a.accept(*miSocket);
std::cout << "Connected\n";
connected = true;
try{
while (connected){
data = readStr();
if (data.compare("")==0){
std::cout << "End of connection.\n";
}
else{
std::cout << data << "\n";
}
}
}
catch (std::exception& e){
std::cerr << "Exception in thread: " << e.what() << "\n";
}
}
}
我想做什么:
void SocketServer::runThreadServer(){
asio::thread t(runServer);
}
但它没有编译。错误:
没有用于调用'asio :: thread :: thread()的匹配函数 注意:候选者是:asio :: thread :: thread(Function)[with Function = void(SocketServer :: *)()]
我该怎么做?
感谢名单。
答案 0 :(得分:4)
像Joachim Pileborg所说,执行此操作的标准方法是使用boost::bind
。 boost::bind
专门从C ++对象及其成员函数生成一个名为boost::function
的构造(可以在boost::thread
的c'tor中传递)。
这样的事情:
boost::thread t(boost::bind(&SocketServer::runServer, this));