]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/thread/example/future_fallback_to.cpp
1 // Copyright (C) 2012-2013 Vicente Botet
3 // Distributed under the Boost Software License, Version 1.0. (See accompanying
4 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 #include <boost/config.hpp>
7 #if ! defined BOOST_NO_CXX11_DECLTYPE
8 #define BOOST_RESULT_OF_USE_DECLTYPE
11 #define BOOST_THREAD_VERSION 4
12 //#define BOOST_THREAD_USES_LOG
13 #define BOOST_THREAD_USES_LOG_THREAD_ID
15 #include <boost/thread/detail/log.hpp>
16 #include <boost/thread/future.hpp>
17 #include <boost/assert.hpp>
22 #if defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
26 BOOST_THREAD_LOG
<< "P1" << BOOST_THREAD_END_LOG
;
27 throw std::logic_error("kk");
32 BOOST_THREAD_LOG
<< "P1" << BOOST_THREAD_END_LOG
;
38 const int number_of_tests
= 200;
39 BOOST_THREAD_LOG
<< "<MAIN" << BOOST_THREAD_END_LOG
;
42 for (int i
=0; i
< number_of_tests
; i
++)
45 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
46 boost::future
<int> f1
= boost::async(boost::launch::async
, &p1
);
47 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
49 BOOST_ASSERT(f1
.get()==1);
50 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
52 catch (std::exception
& ex
)
54 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << "ERRORRRRR "<<ex
.what() << "" << std::endl
;
55 BOOST_THREAD_LOG
<< "ERRORRRRR "<<ex
.what() << "" << BOOST_THREAD_END_LOG
;
60 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << " ERRORRRRR exception thrown" << std::endl
;
61 BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG
;
67 for (int i
=0; i
< number_of_tests
; i
++)
70 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
71 boost::future
<int> f1
= boost::async(&p1
);
72 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
73 boost::future
<int> f2
= f1
.fallback_to(-1);
74 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
76 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
77 BOOST_ASSERT(f2
.get()==1);
78 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
79 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
81 catch (std::exception
& ex
)
83 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << "ERRORRRRR "<<ex
.what() << "" << std::endl
;
84 BOOST_THREAD_LOG
<< "ERRORRRRR "<<ex
.what() << "" << BOOST_THREAD_END_LOG
;
89 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << " ERRORRRRR exception thrown" << std::endl
;
90 BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG
;
96 for (int i
=0; i
< number_of_tests
; i
++)
99 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
100 boost::future
<int> f1
= boost::async(boost::launch::async
, &p1_ex
);
101 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
103 BOOST_ASSERT(f1
.get_or(-1)==-1);
104 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
106 catch (std::exception
& ex
)
108 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << "ERRORRRRR "<<ex
.what() << "" << std::endl
;
109 BOOST_THREAD_LOG
<< "ERRORRRRR "<<ex
.what() << "" << BOOST_THREAD_END_LOG
;
114 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << " ERRORRRRR exception thrown" << std::endl
;
115 BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG
;
121 for (int i
=0; i
< number_of_tests
; i
++)
124 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
125 boost::future
<int> f1
= boost::async(boost::launch::async
, &p1_ex
);
126 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
127 boost::future
<int> f2
= f1
.fallback_to(-1);
128 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
130 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
131 BOOST_ASSERT(f2
.get()==-1);
132 //std::cout << __FILE__ << "["<< __LINE__<<"] " << std::endl;
133 BOOST_THREAD_LOG
<< "" << BOOST_THREAD_END_LOG
;
135 catch (std::exception
& ex
)
137 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << "ERRORRRRR "<<ex
.what() << "" << std::endl
;
138 BOOST_THREAD_LOG
<< "ERRORRRRR "<<ex
.what() << "" << BOOST_THREAD_END_LOG
;
143 std::cout
<< __FILE__
<< "["<< __LINE__
<<"] " << " ERRORRRRR exception thrown" << std::endl
;
144 BOOST_THREAD_LOG
<< " ERRORRRRR exception thrown" << BOOST_THREAD_END_LOG
;
148 BOOST_THREAD_LOG
<< "MAIN>" << BOOST_THREAD_END_LOG
;