I have tested the following example code with Boost 1.61. And it worked (ignore the potential race conditions when accessing the variable 'p'). But I am not sure the fiber promise can be used in this way or I am just being lucky.
#include <cstdlib>
#include "boost/fiber/fiber.hpp"
#include "boost/fiber/future.hpp"
#include "boost/thread.hpp"
#include <set>
#include <iostream>
#include <boost/date_time/posix_time/posix_time_duration.hpp>
#include <boost/thread/pthread/mutex.hpp>
#include <boost/thread/lock_guard.hpp>
#include "boost/thread/pthread/thread_data.hpp"
#include "boost/chrono/duration.hpp"
using namespace std;
boost::fibers::promise<int>* p;
void wait()
{
p = new boost::fibers::promise<int>;
auto future = p->get_future();
auto status = future.wait();
std::cout << "Value: " << future.get() << std::endl;
delete p;
}
void f()
{
boost::fibers::fiber fiberJob(&wait);
fiberJob.join();
}
void setf()
{
// Is it safe to do this?
boost::this_thread::sleep(boost::posix_time::seconds(5));
p->set_value(20);
}
void f1()
{
boost::fibers::fiber fiberJob(&setf);
fiberJob.join();
}
int main(int argc, char** argv)
{
boost::thread t(&f);
setf();
cout << "Here" << endl;
t.join();
cout << "Here 2" << endl;
return 0;
}