中断boost :: asio同步读取?

SDD*_*SDD 6 c++ multithreading boost network-programming boost-asio

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

但是,我希望线程在调用此类的析构函数时退出.问题是对任何读取函数的调用都会阻塞,因此线程不能轻易终止.在Win32中有一个API:WaitForMultipleObjects这将完全符合我的要求.

如何通过提升获得类似的效果?

Bee*_*ope 2

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

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

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