Ich benutze Apache-Sparsamkeit in C++ unter Windows und ich möchte um Ihre Hilfe mit dem Abbruch eines blockierenden Lesevorgangs bitten, der gerade ausgeführt wird. Die Leseoperation (zum Beispiel - TProtocol :: readByte) ist blockiert, bis die Daten empfangen werden. Wenn ich den Transport von einem anderen Thread schließe, erhalte ich eine fehlgeschlagene Assertion über einen Nullzeiger.Einen blockierenden Lesevorgang in Thrift abbrechen
Gibt es eine andere Möglichkeit, eine blockierte Leseoperation abzubrechen?
In diesem Fall kann jede Implementierung von TProtocol nicht unterscheiden zwischen "der Server hat noch keine Daten gesendet" und "der Benutzer möchte den Vorgang abbrechen". Da wir nicht über eine schnelle Verbindung arbeiten, müssen wir wirklich zwischen diesen beiden Fällen unterscheiden. – Alex
Warum interessieren Sie sich für TProtocol? Nach dem RPC-Aufruf gibt es einen TimeoutException-Throw für beide Fälle, und Sie können entscheiden, was als Nächstes gilt. – secmask
Da der Benutzer unseres Kommunikationscodes diese Ausnahme im * legitimen * Fall erhält, in dem die Antwort des Servers noch nicht angekommen ist. Wenn meine Zeitüberschreitung zu lang ist, ist die Antwort der Stornierung für unseren Kunden zu langsam. Da wir in einer Umgebung mit geringer Bandbreite und hoher Latenz arbeiten, können wir uns keine kurzen Timeouts leisten, da sie fast immer vorkommen. Wir wollen jedoch immer noch absagen. – Alex