如何启动一个运行类函数的boost线程?

时间:2012-02-10 17:23:46

标签: c++ boost boost-asio boost-thread

我正在做一个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 :: *)()]

我该怎么做?

感谢名单。

1 个答案:

答案 0 :(得分:4)

像Joachim Pileborg所说,执行此操作的标准方法是使用boost::bindboost::bind专门从C ++对象及其成员函数生成一个名为boost::function的构造(可以在boost::thread的c'tor中传递)。

这样的事情:

boost::thread t(boost::bind(&SocketServer::runServer, this));