如何使io_service.run();阻塞

How to make io_service.run(); blocking

本文关键字:阻塞 run service 何使 io      更新时间:2023-10-16

我有这个方法,我需要io_service.run((;以阻止该方法在实际REST调用尚未完成时返回。我为响应主体添加了一个"init"值,只是为了进行检查。

RESTClient::response RESTClient::get(std::string url){
    RESTClient::response ret = {};
    ret.code = 404;
    ret.body = "init";
    boost::asio::ssl::context ctx(boost::asio::ssl::context::sslv23);
    ctx.set_verify_mode(boost::asio::ssl::verify_none);
    //ctx.set_default_verify_paths();
    boost::asio::io_service io_service;
    client c(io_service, ctx, "httpbin.org", "/get", "https", ret);
    io_service.run();
    return ret; // res.body returned is init
}

io_service.run()以何种方式阻止方法返回,直到调用完成或超时?

如果您希望run()在没有"工作"的情况下继续运行,您可以使用boost::asio::io_service::work对象锁定服务队列:

  • http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio/reference/io_service__work.html

通常的模式是使用optional<io_service::work>shared_ptr<io_service::work>,这样您就可以进行

_work.reset();

当您希望服务从run()返回时。