如何制作io_service.run();闭塞

时间:2015-07-08 12:26:47

标签: c++ boost

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

echo $this->headLink();

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 } 以什么方式阻止方法返回,直到调用完成或超时?

1 个答案:

答案 0 :(得分:1)

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

通常的模式是使用optional<io_service::work>shared_ptr<io_service::work>所以你可以做到

_work.reset();

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