]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright (C) 2010 Vicente Botet |
2 | // | |
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) | |
5 | ||
6 | #include <iostream> | |
7 | #include <boost/thread.hpp> | |
8 | #include <boost/thread/thread_only.hpp> | |
9 | #include <boost/optional.hpp> | |
10 | #include <boost/detail/lightweight_test.hpp> | |
11 | ||
12 | using namespace boost; | |
13 | using namespace boost::chrono; | |
14 | ||
15 | struct dummy_class_tracks_deletions | |
16 | { | |
17 | static unsigned deletions; | |
18 | ||
19 | dummy_class_tracks_deletions() | |
20 | { | |
21 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
22 | } | |
23 | ~dummy_class_tracks_deletions() | |
24 | { | |
25 | ++deletions; | |
26 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
27 | } | |
28 | ||
29 | }; | |
30 | unsigned dummy_class_tracks_deletions::deletions=0; | |
31 | ||
32 | ||
33 | optional<thread_specific_ptr<dummy_class_tracks_deletions> > optr; | |
34 | //struct X | |
35 | //{ | |
36 | // thread_specific_ptr<int> f; | |
37 | //} sptr; | |
38 | ||
39 | void other_thread() | |
40 | { | |
41 | ||
42 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
43 | optr = none; | |
44 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
45 | optr = in_place(); | |
46 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
47 | BOOST_TEST(optr->get() == 0); | |
48 | this_thread::sleep(posix_time::seconds(5)); | |
49 | BOOST_TEST(optr->get() == 0); | |
50 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
51 | ||
52 | } | |
53 | ||
54 | int main() | |
55 | { | |
56 | ||
57 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
58 | dummy_class_tracks_deletions * pi = new dummy_class_tracks_deletions; | |
59 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
60 | optr = in_place(); | |
61 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
62 | optr->reset(pi); | |
63 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
64 | BOOST_TEST(optr->get() == pi); | |
65 | thread t1(bind(&other_thread)); | |
66 | this_thread::sleep(posix_time::seconds(5)); | |
67 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
68 | BOOST_TEST(optr->get() == pi); | |
69 | std::cout << __FILE__ << ":" << __LINE__ << boost::this_thread::get_id() << std::endl; | |
70 | t1.join(); | |
71 | return boost::report_errors(); | |
72 | ||
73 | } |