在Thrift中取消阻塞读取操作

Ale*_*tof 9 c++ windows thrift

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

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

ste*_*hke 5

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

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


sec*_*ask 3

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