Ausnahme propagation und std :: future

8

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%     
Bukes 08.01.2013, 19:49
quelle

2 Antworten

12

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.

    
GManNickG 08.01.2013, 20:19
quelle
0

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%     
joseAndresGomezTovar 16.10.2013 10:24
quelle