boost :: future and continuations - Wert gesetzt, Zukunft aber weiterhin blockiert
Ich versuche folgende Fortsetzung zum Laufen zu bringen - aberf.get()
Blöcke. Was ist los mit dir?
#include <iostream>
#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include <boost/thread/future.hpp>
struct Foo {
boost::future<int> start() {
return p.get_future();
}
void finish() {
p.set_value(23);
}
boost::promise<int> p;
};
int main () {
Foo foo;
foo.start().then([](boost::future<int> f) {
std::cout << "done:" << std::endl;
std::cout << f.get() << std::endl;
});
foo.finish();
}
Es wird das drucken"done:"
, also die Zukunft brennt, aber es wird dann einfach "hängen bleiben"f.get()
.. Ich bin verloren.
Bauen:
clang++ -o test8 -std=c++11 -stdlib=libc++ -lboost_thread -lboost_system \
-I/home/oberstet/boost_1_55_0 -L/home/oberstet/boost_1_55_0/stage/lib \
test8.cpp
AKTUALISIEREN: Die folgende Codeänderung bewirkt, dass das Beispiel funktioniert - aber warum? Schon seitf2
wird sowieso nicht verwendet. Wieder verwirrt.
boost::future<void> f2 = foo.start().then([](boost::future<int> f) {
std::cout << "done:" << std::endl;
std::cout << f.get() << std::endl;
});
UPDATE 2: Folgendes, Hinzufügen einer Startrichtlinielaunch::deferred
wird auch funktionieren:
foo.start().then(boost::launch::deferred, [](boost::future<int> f) {
std::cout << "done:" << std::endl;
std::cout << f.get() << std::endl;
});
und das auch:
boost::future<int> start() {
boost::future<int> f = p.get_future();
f.set_deferred();
return f;
}