Продолжение boost :: future вызывается при использовании boost :: async, но не в std :: thread. Я использую «gcc версии 5.3.0 20151204 (Ubuntu 5.3.0-3ubuntu1 ~ 14.04)»
В следующей программе код под макросом «РАБОТЫ» выводит следующий вывод
стоимость обещания =
тогда значение = 3
Значение = 3
но другой путь кода не удается. вторая-последняя строка «newff.wait ()» завершается неудачно со следующим выводом
стоимость обещания =
прекращение вызывается после создания экземпляра ‘boost :: exception_detail :: clone_impl>’ what (): операция не разрешена для объекта без связанного состояния Прервано (ядро сброшено)
#include <thread>
#include <iostream>
#define BOOST_THREAD_PROVIDES_FUTURE
#define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
#include <boost/thread/future.hpp>
boost::promise<int> apromise;
int func()
{
std::cout << "promise value=" << std::endl;
apromise.set_value(3);
return 3;
}
#define WORKS
int main()
{
#ifdef WORKS
auto ff = boost::async(func);
#else // Doesn't work
auto ff = apromise.get_future();
std::thread t(func);
#endif
auto newff = ff.then([&] (boost::future<int>& f)
{
std::cout << "then value=" << f.get() << std::endl;
return f.get();
});
#ifndef WORKS
t.join();
#endif
newff.wait();
std::cout << "value=" << newff.get() << std::endl;
}
Задача ещё не решена.
Других решений пока нет …