12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // 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;
- }
|