Erhalte den Status eines std :: future
Ist es möglich zu überprüfen, ob eine std::future
beendet wurde, oder nicht? Soweit ich sagen kann der einzige Weg, es zu tun wäre zu nennen wait_for
mit einer null-Dauer und überprüfen Sie, ob der status ready
oder nicht, aber gibt es einen besseren Weg?
Kommentar zu dem Problem
Überprüfen Sie
valid
? @CatPlusPlus Wenn ich nicht Irre,
valid
prüft nur, ob die Zukunft einen gemeinsamen Staat (D. H. Es gibt true
bis get
aufgerufen wird, auf die Zukunft). Also, wenn
get
aufgerufen wurde und liefert den gespeicherten Wert, wollen Sie immer noch true
? (Ich bin mir nicht sicher, warum dies wäre sinnvoll, da bekommst du nur den Wert einmal.) Ein warten mit einer null-timeout ist, wie die meisten APIs über viele Plattformen beschäftigen sich mit einem solchen Konzept... So sehr, dass ich denken würde, es der "standard" Weg der Annäherung an das Konzept. Das macht mich ein bisschen verwirrt bei der Vorstellung von der "besseren Weg"...
@asveikau ich war nicht bewusst, dies war eine gängige Praxis. Es fühlt sich einfach merkwürdig Aufruf einer wait-Funktion, wenn ich nicht wollen, zu warten.
InformationsquelleAutor der Frage David Brown | 2012-06-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie richtig, und abgesehen von aufrufen
wait_until
mit einem Zeitpunkt in der Vergangenheit (was gleichbedeutend ist) es gibt keinen besseren Weg.Könnte man immer schreiben, eine kleine wrapper-wenn Sie möchten, eine bequemere syntax:
N. B. ob die Funktion aktive latente dies wird nie true zurück, so ist es wahrscheinlich besser, um zu überprüfen
wait_for
direkt in dem Fall, wo möchten Sie vielleicht zu laufen, die latente Aufgabe, synchron, nachdem eine bestimmte Zeit abgelaufen ist, oder wenn die Systemlast niedrig ist.InformationsquelleAutor der Antwort Jonathan Wakely
Gibt es eine is_ready member-Funktion in den Werken für std::future. In der Zwischenzeit die VC-Implementierung hat eine _Is_ready() Mitglied.
InformationsquelleAutor der Antwort Rick Yorgason
Meine erste Wette wäre zu nennen
wait_for
mit einem 0 Dauer, und überprüfen Sie das Resultat-code, kann manfuture_status::ready
,future_status::deferred
oderfuture_status::timeout
.In cppreference Sie behaupten, dass
valid()
prüft, ob das Ergebnis verfügbar ist, aber der standard sagt, dassvalid()
zurücktrue
wenn*this
bezieht sich auf einen gemeinsamen Staat, unabhängig davon, ob dieser Zustand ist bereit oder nicht.InformationsquelleAutor der Antwort David Rodríguez - dribeas