Sto usando Apache parser in C++ su Windows e vorrei chiedere il vostro aiuto con la cancellazione di un'operazione di lettura di blocco in corso. L'operazione di lettura (ad esempio - TProtocol :: readByte) viene bloccata finché non vengono ricevuti i dati. Quando chiudo il trasporto da un altro thread, ottengo un'asserzione fallita su un puntatore nullo.Annullamento di un'operazione di lettura blocco in Thrift
Esiste un altro modo per annullare un'operazione di lettura bloccata?
In questo caso, qualsiasi implementazione di TProtocol non sarà in grado di distinguere tra "il server non ha ancora inviato dati" e "l'utente desidera annullare l'operazione". Dato che non operiamo su una connessione veloce, abbiamo davvero bisogno di distinguere tra questi due casi. – Alex
Perché ti interessa TProtocol? Ci sarà un lancio TimeoutException per entrambi i casi dopo la chiamata RPC, e tu potrai decidere cosa fare dopo. – secmask
Poiché l'utente del nostro codice di comunicazione otterrà questa eccezione nel caso * legittimo * in cui la risposta del server non è ancora arrivata. Se il mio timeout è troppo lungo, la risposta della cancellazione sarà troppo lenta per il nostro cliente. Poiché operiamo in un ambiente con bassa larghezza di banda e latenza elevata, non possiamo permetterci brevi timeout, poiché quasi sempre accadranno. Tuttavia, vogliamo ancora annullare. – Alex