Sto utilizzando la ruggine websocket library di parlare con le cose e ho questa discussione che sembra più o meno in questo modo:Lettura due iteratori bloccanti
thread::spawn(move || {
while let Ok(Message::Text(text)) = receiver.recv_message() {
/* Do some stuff */
}
});
Il ricevitore di cui sopra può anche essere un iteratore blocco:
thread::spawn(move || {
for message in receiver.incoming_messages() {
/* Do same stuff */
}
});
Voglio inviare un segnale a questo thread dicendogli di smettere di fare le cose. Ho pensato che un mpsc::channel
sarebbe ottimo per questo invio di segnali. select!
sembrava la strada da percorrere, ma funziona solo se tutti i canali sono tipi mpsc::channel
.
C'è qualcosa che può unire due iteratori di blocco e fornire l'output mentre i dati arrivano? O qualsiasi altra soluzione a questo problema? Mi piacerebbe evitare di creare un thread per ciascuna fonte di input e gestire la mia coda.
Busy attesa ... (vale a dire, un ciclo su tutti i canali di picco per vedere se hanno qualche cosa, e la resa/sonno alla fine del ciclo, se non hai niente) –
@MatthieuM. Come si può dare un'occhiata a un iteratore di blocco? Forse mi manca qualcosa, ma poiché sta bloccando, il controllo non verrà restituito finché non sarà disponibile un elemento dall'iteratore controllato. Dovresti creare un thread per blocco iteratore, come suggerito da OP. – Shepmaster
@Shepmaster: Dannato; lieto che fosse solo un commento: p Anche se ho solo suggerito scherzando comunque perché è più un hack che una vera soluzione: x –