1
我有以下的(最小化)类处理我的服务器连接:如何防止Boost :: Asio计时器阻止io_service :: run()的返回?
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()
返回,直到它过期。我想要的是定时器仅在完成时取消并取消异步操作时调用,但在io_service
的上下文中不作为work
。有没有计时器作为工作,或处理这种情况的另一种好方法?
在单独的线程中运行? –
@JoachimPileborg:可能,但我认为它会很难看,因为在实际的代码中,超时函数会做更多的事情。并调用'ioService.sop()'不会取消正在运行的处理程序,因此我将不得不使用大量的互斥体,我想避免。 – Haatschii
'io_service'是调度定时器完成处理程序(以及其他asio对象处理程序)的工具 - 如果'io_service'在此之前退出,则没有人会调用您的'timeout'函数! –