f3a66f76e0
[SVN r86770]
62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
// Copyright (C) 2013 Vicente Botet
|
|
//
|
|
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
#define BOOST_THREAD_VERSION 4
|
|
|
|
#include <iostream>
|
|
#include <functional>
|
|
//#include <future>
|
|
|
|
#include <boost/thread.hpp>
|
|
#include <boost/shared_ptr.hpp>
|
|
|
|
int f()
|
|
{
|
|
return 42;
|
|
}
|
|
|
|
boost::packaged_task<int()>* schedule(boost::function<int ()> const& fn)
|
|
{
|
|
// Normally, the pointer to the packaged task is stored in a queue
|
|
// for execution on a separate thread, and the schedule function
|
|
// would return just a future<T>
|
|
|
|
boost::function<int ()> copy(fn);
|
|
boost::packaged_task<int()>* result = new boost::packaged_task<int()>(copy);
|
|
return result;
|
|
}
|
|
|
|
struct MyFunc
|
|
{
|
|
MyFunc(MyFunc const&) = delete;
|
|
MyFunc& operator=(MyFunc const&) = delete;
|
|
MyFunc() {};
|
|
MyFunc(MyFunc &&) {};
|
|
MyFunc& operator=(MyFunc &&) { return *this;};
|
|
void operator()()const {}
|
|
};
|
|
|
|
|
|
int main()
|
|
{
|
|
boost::packaged_task<int()>* p(schedule(f));
|
|
(*p)();
|
|
|
|
boost::future<int> fut = p->get_future();
|
|
std::cout << "The answer to the ultimate question: " << fut.get() << std::endl;
|
|
|
|
{
|
|
boost::function<void()> f;
|
|
MyFunc mf;
|
|
|
|
boost::packaged_task<void()> t1(f);
|
|
boost::packaged_task<void()> t2(boost::move(mf));
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|