我有这个方法,我需要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
}
以什么方式阻止方法返回,直到调用完成或超时?
答案 0 :(得分:1)
如果您希望run()
在没有“工作”的情况下继续运行,您可以使用boost::asio::io_service::work
对象锁定服务队列:
通常的模式是使用optional<io_service::work>
或shared_ptr<io_service::work>
所以你可以做到
_work.reset();
当您希望服务从run()
返回时。