Повышение будущего продолжения не вызывается

Продолжение 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;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …