c++ - 中断 boost::asio 同步读取?

标签 c++ multithreading boost network-programming boost-asio

我正在使用 asio 同步套接字从后台线程通过 TCP 读取数据。这被封装在“服务器”类中。

但是,我希望线程在调用此类的析构函数时退出。 问题是对任何读取函数的调用都会阻塞,因此无法轻易终止线程。在 Win32 中有一个 API:WaitForMultipleObjects 可以完全满足我的要求。

如何使用 boost 实现类似的效果?

最佳答案

在我们的应用程序中,我们设置了“终止”条件,然后使用自连接到线程正在监听的端口,以便它醒来,记录终止条件并终止。

您还可以检查 boost 实现 - 如果他们只是在套接字上进行普通读取(即,不在内部使用 WaitForMultipleObjects 之类的东西)那么您可能会得出结论,没有任何东西可以简单而干净地解除阻塞线。如果他们正在等待多个对象(或一个完成端口),您可以四处挖掘以查看唤醒阻塞线程的能力是否暴露给外部。

最后,您可以终止线程 - 但您必须在 boost 之外执行此操作,并了解后果,例如悬挂或泄漏的资源。如果您正在关闭,这可能不是问题,具体取决于该线程还在做什么。

关于c++ - 中断 boost::asio 同步读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856957/

相关文章:

java - 生产者消费者——使用Executors.newFixedThreadPool

C++ - 通过多线程同时播放多个蜂鸣声?

java - 为什么 java.util.concurrent.atomic.AtomicBoolean 在内部用 int 实现?

c++ - 检查数据是否到达 OK

c++ - FFmpeg:如何在从 RTSP 读取时控制控制台输出?

c++ - QImage 和 QPixmap 有什么区别?

c++ - 重写虚函数仅通过调用约定有什么不同意味着什么?

c++ - 使用 Opencv 调整/裁剪图像

c++ - linux c++ 中的内存释放?

c++ - 存储对象列表的最佳标准类?