如何使io_service.run();阻塞
How to make io_service.run(); blocking
我有这个方法,我需要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()
返回时。
相关文章:
- QTcpSocket在不阻塞GUI的情况下重新连接到服务器
- join() 失败,如果在线程内部调用 io_context.run()
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- 为什么创建服务器后C++ httplib 库阻塞了我的主线程?
- 阻塞信号会导致升压过程不起作用
- 为什么我会收到"Run-Time Check Failure #2 - Stack around the variable 'pr' was corrupted"错误?
- 避免在条件更新时丢失唤醒是一个阻塞功能
- pthread_kill() 与 pthread_cancel() 终止因 I/O 而阻塞的线程
- 提升 asio io_content运行非阻塞
- 阻塞管道连接命名管道不触发
- C++ POCO - 如何在不使用 run() 方法的情况下启动线程池上的线程?
- 在C++中执行非阻塞线程
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- C++17 标准::异步非阻塞执行
- 如何实现阻塞处理循环?
- 不安全的 MPI 非阻塞通信示例?
- TensorFlow c++ API 在 session->run() 上崩溃
- 内联asm编译器屏障(内存阻塞器)是算作外部函数,还是算作静态函数调用
- 如何使io_service.run();阻塞
- io_service.run() 没有阻塞。服务器已创建,然后立即关闭