如何解决C ++异步等待响应,最佳设计?
我有一个带有主循环的程序,必须保持运行。有时会向网络发出请求,因此我将它们推迟到产生另一个线程的请求服务。对最终反应采取行动的最佳方法是什么?
我的想法是在发出请求时设置一个变量,通过互斥对象对其进行保护,并让服务线程在响应完成时翻转该变量。这意味着我必须不断检查主循环中的变量。这是最好的方法吗?
我熟悉Javascript中的异步编程,但是只有一个线程,因此回调可以安全地完成所有工作。
谢谢。
编辑:我正在使用C ++ 17。
解决方法
对于很多流量,我将使用线程来执行联网,请使用包含互斥量,双端队列和条件变量的“ IPC”对象。
使用std::shared_ptr
将IPC共享到主上下文和线程上下文。
当线程接收到消息时,它将锁定互斥锁(使用std::lock_guard
)并将消息推送到双端队列。在锁之外,然后向条件变量发出信号。
主线程将等待条件变量,当收到信号时,它将锁定互斥锁并从双端队列中弹出任何内容。请注意,您使用互斥锁保护仅双端队列。
。
另一种方法是使用std::async
方法接收消息,而主程序将使用get
方法等待消息,该方法将等待直到异步方法完成。
我将选择权主要取决于您打算进行多少次联网;如果只是偶尔的“打开-发送-接收-关闭”事务,那么一定要考虑使用异步。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。