9

我在 Windows 上的 C++ 中使用 Apache thrift,我想请你帮忙取消正在进行的阻塞读取操作。读取操作(例如 – TProtocol::readByte)被阻塞,直到接收到数据。当我从另一个线程关闭传输时,我得到一个关于空指针的失败断言。

有没有其他方法可以取消阻塞的读取操作?

4

2 回答 2

5

假设您在 Windows 上运行(根据您问题上的标签):您可以取消阻塞套接字操作WSACancelBlockingCall(尽管此操作已被弃用,但它应该仍然有效)。然后,您的套接字将返回错误代码WSAEINTR(中断的函数调用)而不是WSAETIMEDOUT.

在 Thrift 中,您可以使用TSocket::getSocketFD()TPipe::getPipeHandle()来获取取消当前操作的相应句柄。

于 2013-09-03T08:40:23.813 回答
3

如果您使用的是阻塞模式,那么中止读取操作的唯一选项是在读取之前在 TSocket 上设置超时。

于 2013-08-29T08:58:29.913 回答