Ich verwende den Rust websocket library, um die Dinge zu sprechen, und ich habe diesen Thread, der in etwa wie folgt aussieht:Lese zwei Sperr Iteratoren
thread::spawn(move || {
while let Ok(Message::Text(text)) = receiver.recv_message() {
/* Do some stuff */
}
});
Der obige Empfänger kann auch ein Sperr Iterator sein:
thread::spawn(move || {
for message in receiver.incoming_messages() {
/* Do same stuff */
}
});
Ich möchte ein Signal an diesen Thread senden, er soll aufhören, Dinge zu tun. Ich dachte, ein mpsc::channel
wäre großartig für dieses Signal-Senden. select!
schien wie der Weg zu gehen, aber es funktioniert nur, wenn alle Kanäle mpsc::channel
Typen sind.
Gibt es etwas, das zwei blockierende Iteratoren beitreten kann und Ausgabe als Daten zur Verfügung stellt? Oder irgendeine andere Lösung für dieses Problem? Ich möchte vermeiden, einen Thread für jede Quelle der Eingabe zu erstellen und meine eigene Warteschlange zu verwalten.
Busy Waiting ... (dh Schleife über alle Kanäle Peaking, um zu sehen, ob sie etwas haben, und Ertrag/Schlaf am Ende der Iteration, wenn Sie nichts bekommen) –
@MatthieuM. Wie kann man einen blockierenden Iterator sehen? Vielleicht verpasse ich etwas, aber weil es blockiert, wird die Kontrolle nicht zurückgegeben, bis ein Element verfügbar ist, das vom Iterator geprüft wird. Sie müssten einen Thread pro blockierenden Iterator erstellen, wie OP vorgeschlagen hat. – Shepmaster
@Shempmaster: Verdammt; Ich bin froh, dass es nur ein Kommentar war: p Obwohl ich nur im Scherz vorgeschlagen habe, weil es eher ein Hack als eine echte Lösung ist: x –