在Thrift中取消阻塞读取操作

时间:2013-08-29 07:54:52

标签: c++ windows thrift

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

还有其他方法可以取消阻止的读取操作吗?

2 个答案:

答案 0 :(得分:5)

假设您在Windows上运行(根据您问题上的标记):您可以使用WSACancelBlockingCall取消阻塞套接字操作(尽管此操作已弃用,但它仍然有效)。然后,您的套接字将返回错误代码WSAEINTR (Interrupted function call),而不是WSAETIMEDOUT

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

答案 1 :(得分:3)

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