如何防止Boost :: Asio定时器阻止io_service :: run()的返回?

时间:2013-08-31 12:46:42

标签: c++ boost boost-asio

我有以下(最小化)类处理我的服务器连接:

class AsioServer {
protected:
    boost::asio::io_service ioService;
public:
    AsioServer() {}

    void add_request() {
        //Adding async requests to the ioService
    }

    void timeout() {
        //Stop all pedning async operations
        ioService.stop();
    }

    void perform() {
        //Set a timer
        boost::asio::deadline_timer timer(ioService);
        timer.expires_from_now(boost::posix_time::seconds(5));
        timer.async_wait(std::bind(&AsioServer::timeout, this));

        //Performe all Async operations
        ioService.run();
        ioService.reset();
    }
};

我的问题是截止日期定时器阻止ioService.run()返回,直到它过期。我想要的是定时器仅在经历然后取消异步操作时被调用,但在work的上下文中不充当io_service。是不是计时器不是工作,还是处理这种情况的另一种好方法?

1 个答案:

答案 0 :(得分:1)

io_service::run不会退出(如果没有显式停止),只要它有一些工作 - 这包括任何i / o对象和计时器的完成处理程序,因为io_service全权负责调度所有这些处理程序。

如果您不希望定时器在套接字I / O操作完成后再等待 - 只需cancel()定时器或重新安排定时器(如果适用)。你可以找到这样的方法in asio examples