我有以下(最小化)类处理我的服务器连接:
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
。是不是计时器不是工作,还是处理这种情况的另一种好方法?
答案 0 :(得分:1)
io_service::run
不会退出(如果没有显式停止),只要它有一些工作 - 这包括任何i / o对象和计时器的完成处理程序,因为io_service
全权负责调度所有这些处理程序。
如果您不希望定时器在套接字I / O操作完成后再等待 - 只需cancel()
定时器或重新安排定时器(如果适用)。你可以找到这样的方法in asio examples。