首页 > 解决方案 > C ++异步等待响应,最佳设计?

问题描述

我有一个带有必须保持运行的主循环的程序。有时会向网络发出请求,所以我将它们推迟到产生另一个线程的请求发出服务。对最终响应采取行动的最佳方式是什么?

我的想法是在发出请求时设置一个变量,用互斥锁保护它,并让服务线程在完成时翻转变量,并做出响应。这意味着我必须不断检查主循环中的变量。这是最好的方法吗?

我熟悉 Javascript 中的异步编程,但只有一个线程,所以回调可以安全地完成所有工作。

谢谢你。

编辑:我正在使用 C++ 17。

标签: c++c++17

解决方案


对于大量流量,我会使用线程来执行网络,使用包含互斥体、双端队列和条件变量的“IPC”对象。

使用 astd::shared_ptr将 IPC 共享给主上下文和线程上下文。

当线程接收到消息时,它会锁定互斥锁(使用std::lock_guard)并将消息推送到双端队列。在锁之外,然后向条件变量发出信号。

主线程将等待条件变量,当发出信号时,它将锁定互斥体并从双端队列中弹出任何内容。请注意,您使用互斥锁保护双端队列。

.

另一种方法是使用一种std::async方法来接收消息,并且主程序将使用该方法等待它,该get方法将等待异步方法完成。

我将选择很大程度上取决于您打算建立多少网络。如果只是偶尔的“打开-发送-接收-关闭”事务,那么肯定会考虑使用异步。


推荐阅读