Ich verstehe, dass wenn eine asynchrone Operation eine Ausnahme auslöst, sie an einen Thread weitergegeben wird, der std::future::get()
aufruft. Wenn ein solcher Thread jedoch std::future::wait()
aufruft, wird die Ausnahme nicht sofort weitergegeben - sie wird bei einem nachfolgenden Aufruf von std::future::get()
ausgelöst.
In einem solchen Szenario soll jedoch eine solche Ausnahme passieren, wenn das zukünftige Objekt nach einem Aufruf von std::future::wait()
, aber vor einem Aufruf von std::future::get()
nicht mehr verfügbar ist.
Für die Interessierten gibt es hier ein einfaches Beispiel. In diesem Fall wird die Ausnahme automatisch vom Thread / future-Paket behandelt:
%Vor% Es wird ignoriert und verworfen, genau wie wenn Sie wait()
für einen Wert, aber niemals get()
it.
wait()
sagt einfach "Block bis die Zukunft bereit ist", sei das bereit mit einem Wert oder einer Ausnahme. Es liegt an dem Aufrufer, get()
tatsächlich auf den Wert (oder die Ausnahme) zu setzen. Normalerweise verwendest du nur get()
, das sowieso wartet.
vs2012 \ vc11 \ crt \ future.cpp
Es liegt ein Fehler mit dem
vor %Vor%Dieser Code erzeugte einen ungültigen Zugriff auf "_Future_messages", weil _Mycode.value () gibt 4 zurück.
%Vor%// Codebeispiel
%Vor%Tags und Links c++ multithreading c++11 visual-studio-2012 future