Chris@16
|
1 // Copyright (C) 2001-2003
|
Chris@16
|
2 // William E. Kempf
|
Chris@16
|
3 // Copyright (C) 2011-2013 Vicente J. Botet Escriba
|
Chris@16
|
4 //
|
Chris@16
|
5 // Distributed under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
6 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
7
|
Chris@16
|
8 #ifndef BOOST_THREAD_CONFIG_WEK01032003_HPP
|
Chris@16
|
9 #define BOOST_THREAD_CONFIG_WEK01032003_HPP
|
Chris@16
|
10
|
Chris@16
|
11 #include <boost/config.hpp>
|
Chris@16
|
12 #include <boost/detail/workaround.hpp>
|
Chris@16
|
13 #include <boost/thread/detail/platform.hpp>
|
Chris@16
|
14
|
Chris@16
|
15 //#define BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
|
Chris@16
|
16 // ATTRIBUTE_MAY_ALIAS
|
Chris@16
|
17
|
Chris@101
|
18 #if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
Chris@16
|
19
|
Chris@16
|
20 // GCC since 3.3 has may_alias attribute that helps to alleviate optimizer issues with
|
Chris@16
|
21 // regard to violation of the strict aliasing rules.
|
Chris@16
|
22
|
Chris@16
|
23 #define BOOST_THREAD_DETAIL_USE_ATTRIBUTE_MAY_ALIAS
|
Chris@16
|
24 #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS __attribute__((__may_alias__))
|
Chris@16
|
25 #else
|
Chris@16
|
26 #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS
|
Chris@16
|
27 #endif
|
Chris@16
|
28
|
Chris@16
|
29
|
Chris@16
|
30 #if defined BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED
|
Chris@16
|
31 #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX) \
|
Chris@16
|
32 if (EXPR) {} else boost::throw_exception(EX)
|
Chris@16
|
33 #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \
|
Chris@16
|
34 if (EXPR) {} else boost::throw_exception(EX)
|
Chris@16
|
35 #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \
|
Chris@16
|
36 boost::throw_exception(EX)
|
Chris@16
|
37 #else
|
Chris@16
|
38 #define BOOST_THREAD_ASSERT_PRECONDITION(EXPR, EX)
|
Chris@16
|
39 #define BOOST_THREAD_VERIFY_PRECONDITION(EXPR, EX) \
|
Chris@16
|
40 (void)(EXPR)
|
Chris@16
|
41 #define BOOST_THREAD_THROW_ELSE_RETURN(EX, RET) \
|
Chris@16
|
42 return (RET)
|
Chris@16
|
43 #endif
|
Chris@16
|
44
|
Chris@16
|
45 // This compiler doesn't support Boost.Chrono
|
Chris@16
|
46 #if defined __IBMCPP__ && (__IBMCPP__ < 1100) \
|
Chris@16
|
47 && ! defined BOOST_THREAD_DONT_USE_CHRONO
|
Chris@16
|
48 #define BOOST_THREAD_DONT_USE_CHRONO
|
Chris@16
|
49 #if ! defined BOOST_THREAD_USES_DATETIME
|
Chris@16
|
50 #define BOOST_THREAD_USES_DATETIME
|
Chris@16
|
51 #endif
|
Chris@16
|
52 #endif
|
Chris@16
|
53
|
Chris@16
|
54 // This compiler doesn't support Boost.Move
|
Chris@16
|
55 #if BOOST_WORKAROUND(__SUNPRO_CC, < 0x5100) \
|
Chris@16
|
56 && ! defined BOOST_THREAD_DONT_USE_MOVE
|
Chris@16
|
57 #define BOOST_THREAD_DONT_USE_MOVE
|
Chris@16
|
58 #endif
|
Chris@16
|
59
|
Chris@16
|
60 // This compiler doesn't support Boost.Container Allocators files
|
Chris@16
|
61 #if defined __SUNPRO_CC \
|
Chris@16
|
62 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
63 #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
64 #endif
|
Chris@16
|
65
|
Chris@16
|
66 #if defined _WIN32_WCE && _WIN32_WCE==0x501 \
|
Chris@16
|
67 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
68 #define BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
69 #endif
|
Chris@16
|
70
|
Chris@16
|
71
|
Chris@16
|
72 #if defined BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX || defined BOOST_NO_CXX11_HDR_INITIALIZER_LIST
|
Chris@16
|
73 #define BOOST_THREAD_NO_CXX11_HDR_INITIALIZER_LIST
|
Chris@16
|
74 #define BOOST_THREAD_NO_MAKE_LOCK_GUARD
|
Chris@16
|
75 #define BOOST_THREAD_NO_MAKE_STRICT_LOCK
|
Chris@16
|
76 #define BOOST_THREAD_NO_MAKE_NESTED_STRICT_LOCK
|
Chris@16
|
77 #endif
|
Chris@16
|
78
|
Chris@16
|
79 #if defined(BOOST_NO_CXX11_HDR_TUPLE) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
Chris@16
|
80 #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS
|
Chris@16
|
81 #define BOOST_THREAD_NO_SYNCHRONIZE
|
Chris@16
|
82 #elif defined _MSC_VER && _MSC_VER <= 1600
|
Chris@16
|
83 // C++ features supported by VC++ 10 (aka 2010)
|
Chris@16
|
84 #define BOOST_THREAD_NO_MAKE_UNIQUE_LOCKS
|
Chris@16
|
85 #define BOOST_THREAD_NO_SYNCHRONIZE
|
Chris@16
|
86 #endif
|
Chris@16
|
87
|
Chris@16
|
88 /// BASIC_THREAD_ID
|
Chris@16
|
89 #if ! defined BOOST_THREAD_DONT_PROVIDE_BASIC_THREAD_ID \
|
Chris@16
|
90 && ! defined BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
Chris@16
|
91 #define BOOST_THREAD_PROVIDES_BASIC_THREAD_ID
|
Chris@16
|
92 #endif
|
Chris@16
|
93
|
Chris@16
|
94 /// RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
|
Chris@16
|
95 //#if defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_MSVC
|
Chris@16
|
96 #define BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNTION_PTR
|
Chris@16
|
97 //#endif
|
Chris@16
|
98
|
Chris@16
|
99 // Default version
|
Chris@16
|
100 #if !defined BOOST_THREAD_VERSION
|
Chris@16
|
101 #define BOOST_THREAD_VERSION 2
|
Chris@16
|
102 #else
|
Chris@16
|
103 #if BOOST_THREAD_VERSION!=2 && BOOST_THREAD_VERSION!=3 && BOOST_THREAD_VERSION!=4
|
Chris@16
|
104 #error "BOOST_THREAD_VERSION must be 2, 3 or 4"
|
Chris@16
|
105 #endif
|
Chris@16
|
106 #endif
|
Chris@16
|
107
|
Chris@16
|
108 // CHRONO
|
Chris@16
|
109 // Uses Boost.Chrono by default if not stated the opposite defining BOOST_THREAD_DONT_USE_CHRONO
|
Chris@16
|
110 #if ! defined BOOST_THREAD_DONT_USE_CHRONO \
|
Chris@16
|
111 && ! defined BOOST_THREAD_USES_CHRONO
|
Chris@16
|
112 #define BOOST_THREAD_USES_CHRONO
|
Chris@16
|
113 #endif
|
Chris@16
|
114
|
Chris@16
|
115 #if ! defined BOOST_THREAD_DONT_USE_ATOMIC \
|
Chris@16
|
116 && ! defined BOOST_THREAD_USES_ATOMIC
|
Chris@16
|
117 #define BOOST_THREAD_USES_ATOMIC
|
Chris@16
|
118 //#define BOOST_THREAD_DONT_USE_ATOMIC
|
Chris@16
|
119 #endif
|
Chris@16
|
120
|
Chris@16
|
121 #if defined BOOST_THREAD_USES_ATOMIC
|
Chris@16
|
122 // Andrey Semashev
|
Chris@16
|
123 #define BOOST_THREAD_ONCE_ATOMIC
|
Chris@16
|
124 #else
|
Chris@16
|
125 //#elif ! defined BOOST_NO_CXX11_THREAD_LOCAL && ! defined BOOST_NO_THREAD_LOCAL && ! defined BOOST_THREAD_NO_UINT32_PSEUDO_ATOMIC
|
Chris@16
|
126 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2444.html#Appendix
|
Chris@16
|
127 #define BOOST_THREAD_ONCE_FAST_EPOCH
|
Chris@16
|
128 #endif
|
Chris@16
|
129 #if BOOST_THREAD_VERSION==2
|
Chris@16
|
130
|
Chris@16
|
131 // PROVIDE_PROMISE_LAZY
|
Chris@16
|
132 #if ! defined BOOST_THREAD_DONT_PROVIDE_PROMISE_LAZY \
|
Chris@16
|
133 && ! defined BOOST_THREAD_PROVIDES_PROMISE_LAZY
|
Chris@16
|
134 #define BOOST_THREAD_PROVIDES_PROMISE_LAZY
|
Chris@16
|
135 #endif
|
Chris@16
|
136
|
Chris@16
|
137 // PROVIDE_THREAD_EQ
|
Chris@16
|
138 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_EQ \
|
Chris@16
|
139 && ! defined BOOST_THREAD_PROVIDES_THREAD_EQ
|
Chris@16
|
140 #define BOOST_THREAD_PROVIDES_THREAD_EQ
|
Chris@16
|
141 #endif
|
Chris@16
|
142
|
Chris@16
|
143 #endif
|
Chris@16
|
144
|
Chris@16
|
145 #if BOOST_THREAD_VERSION>=3
|
Chris@16
|
146
|
Chris@16
|
147 // ONCE_CXX11
|
Chris@16
|
148 // fixme BOOST_THREAD_PROVIDES_ONCE_CXX11 doesn't works when thread.cpp is compiled BOOST_THREAD_VERSION 3
|
Chris@16
|
149 #if ! defined BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11 \
|
Chris@16
|
150 && ! defined BOOST_THREAD_PROVIDES_ONCE_CXX11
|
Chris@16
|
151 #define BOOST_THREAD_DONT_PROVIDE_ONCE_CXX11
|
Chris@16
|
152 #endif
|
Chris@16
|
153
|
Chris@16
|
154 // THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
155 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE \
|
Chris@16
|
156 && ! defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
157 #define BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
158 #endif
|
Chris@16
|
159
|
Chris@16
|
160 // THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
161 #if ! defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE \
|
Chris@16
|
162 && ! defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
163 #define BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE
|
Chris@16
|
164 #endif
|
Chris@16
|
165
|
Chris@16
|
166 // PROVIDE_FUTURE
|
Chris@16
|
167 #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE \
|
Chris@16
|
168 && ! defined BOOST_THREAD_PROVIDES_FUTURE
|
Chris@16
|
169 #define BOOST_THREAD_PROVIDES_FUTURE
|
Chris@16
|
170 #endif
|
Chris@16
|
171
|
Chris@16
|
172 // FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
173 #if ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CTOR_ALLOCATORS \
|
Chris@16
|
174 && ! defined BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
175 #define BOOST_THREAD_PROVIDES_FUTURE_CTOR_ALLOCATORS
|
Chris@16
|
176 #endif
|
Chris@16
|
177
|
Chris@16
|
178 // SHARED_MUTEX_UPWARDS_CONVERSIONS
|
Chris@16
|
179 #if ! defined BOOST_THREAD_DONT_PROVIDE_SHARED_MUTEX_UPWARDS_CONVERSIONS \
|
Chris@16
|
180 && ! defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
|
Chris@16
|
181 #define BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
|
Chris@16
|
182 #endif
|
Chris@16
|
183
|
Chris@16
|
184 // PROVIDE_EXPLICIT_LOCK_CONVERSION
|
Chris@16
|
185 #if ! defined BOOST_THREAD_DONT_PROVIDE_EXPLICIT_LOCK_CONVERSION \
|
Chris@16
|
186 && ! defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
|
Chris@16
|
187 #define BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
|
Chris@16
|
188 #endif
|
Chris@16
|
189
|
Chris@16
|
190 // GENERIC_SHARED_MUTEX_ON_WIN
|
Chris@16
|
191 #if ! defined BOOST_THREAD_DONT_PROVIDE_GENERIC_SHARED_MUTEX_ON_WIN \
|
Chris@16
|
192 && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
|
Chris@16
|
193 #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
|
Chris@16
|
194 #endif
|
Chris@16
|
195
|
Chris@16
|
196 // USE_MOVE
|
Chris@16
|
197 #if ! defined BOOST_THREAD_DONT_USE_MOVE \
|
Chris@16
|
198 && ! defined BOOST_THREAD_USES_MOVE
|
Chris@16
|
199 #define BOOST_THREAD_USES_MOVE
|
Chris@16
|
200 #endif
|
Chris@16
|
201
|
Chris@16
|
202 #endif
|
Chris@16
|
203
|
Chris@16
|
204 // deprecated since version 4
|
Chris@16
|
205 #if BOOST_THREAD_VERSION < 4
|
Chris@16
|
206
|
Chris@16
|
207 // NESTED_LOCKS
|
Chris@16
|
208 #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \
|
Chris@16
|
209 && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
|
Chris@16
|
210 #define BOOST_THREAD_PROVIDES_NESTED_LOCKS
|
Chris@16
|
211 #endif
|
Chris@16
|
212
|
Chris@16
|
213 // CONDITION
|
Chris@16
|
214 #if ! defined BOOST_THREAD_PROVIDES_CONDITION \
|
Chris@16
|
215 && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION
|
Chris@16
|
216 #define BOOST_THREAD_PROVIDES_CONDITION
|
Chris@16
|
217 #endif
|
Chris@16
|
218
|
Chris@16
|
219 // USE_DATETIME
|
Chris@16
|
220 #if ! defined BOOST_THREAD_DONT_USE_DATETIME \
|
Chris@16
|
221 && ! defined BOOST_THREAD_USES_DATETIME
|
Chris@16
|
222 #define BOOST_THREAD_USES_DATETIME
|
Chris@16
|
223 #endif
|
Chris@16
|
224 #endif
|
Chris@16
|
225
|
Chris@16
|
226 #if BOOST_THREAD_VERSION>=4
|
Chris@16
|
227
|
Chris@16
|
228 // SIGNATURE_PACKAGED_TASK
|
Chris@16
|
229 #if ! defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK \
|
Chris@16
|
230 && ! defined BOOST_THREAD_DONT_PROVIDE_SIGNATURE_PACKAGED_TASK
|
Chris@16
|
231 #define BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK
|
Chris@16
|
232 #endif
|
Chris@16
|
233
|
Chris@16
|
234 // VARIADIC_THREAD
|
Chris@16
|
235 #if ! defined BOOST_THREAD_PROVIDES_VARIADIC_THREAD \
|
Chris@16
|
236 && ! defined BOOST_THREAD_DONT_PROVIDE_VARIADIC_THREAD
|
Chris@16
|
237
|
Chris@16
|
238 #if ! defined(BOOST_NO_SFINAE_EXPR) && \
|
Chris@16
|
239 ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
|
Chris@16
|
240 ! defined(BOOST_NO_CXX11_DECLTYPE) && \
|
Chris@16
|
241 ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) && \
|
Chris@101
|
242 ! defined(BOOST_NO_CXX11_TRAILING_RESULT_TYPES) && \
|
Chris@16
|
243 ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) && \
|
Chris@16
|
244 ! defined(BOOST_NO_CXX11_HDR_TUPLE)
|
Chris@16
|
245
|
Chris@16
|
246 #define BOOST_THREAD_PROVIDES_VARIADIC_THREAD
|
Chris@16
|
247 #endif
|
Chris@16
|
248 #endif
|
Chris@16
|
249
|
Chris@101
|
250 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY \
|
Chris@101
|
251 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_WHEN_ALL_WHEN_ANY
|
Chris@101
|
252
|
Chris@101
|
253 #if ! defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) && \
|
Chris@101
|
254 ! defined(BOOST_NO_CXX11_HDR_TUPLE)
|
Chris@101
|
255
|
Chris@101
|
256 #define BOOST_THREAD_PROVIDES_FUTURE_WHEN_ALL_WHEN_ANY
|
Chris@101
|
257 #endif
|
Chris@101
|
258 #endif
|
Chris@101
|
259
|
Chris@101
|
260 // ! defined(BOOST_NO_SFINAE_EXPR) &&
|
Chris@101
|
261 // ! defined(BOOST_NO_CXX11_RVALUE_REFERENCES) &&
|
Chris@101
|
262 // ! defined(BOOST_NO_CXX11_AUTO) &&
|
Chris@101
|
263 // ! defined(BOOST_NO_CXX11_DECLTYPE) &&
|
Chris@101
|
264 // ! defined(BOOST_NO_CXX11_DECLTYPE_N3276) &&
|
Chris@101
|
265
|
Chris@16
|
266
|
Chris@16
|
267 // MAKE_READY_AT_THREAD_EXIT
|
Chris@16
|
268 #if ! defined BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT \
|
Chris@16
|
269 && ! defined BOOST_THREAD_DONT_PROVIDE_MAKE_READY_AT_THREAD_EXIT
|
Chris@16
|
270
|
Chris@16
|
271 //#if defined BOOST_THREAD_PROVIDES_SIGNATURE_PACKAGED_TASK && defined(BOOST_THREAD_PROVIDES_VARIADIC_THREAD)
|
Chris@16
|
272 #define BOOST_THREAD_PROVIDES_MAKE_READY_AT_THREAD_EXIT
|
Chris@16
|
273 //#endif
|
Chris@16
|
274 #endif
|
Chris@16
|
275
|
Chris@16
|
276 // FUTURE_CONTINUATION
|
Chris@16
|
277 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION \
|
Chris@16
|
278 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_CONTINUATION
|
Chris@16
|
279 #define BOOST_THREAD_PROVIDES_FUTURE_CONTINUATION
|
Chris@16
|
280 #endif
|
Chris@16
|
281
|
Chris@16
|
282 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_UNWRAP \
|
Chris@16
|
283 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_UNWRAP
|
Chris@16
|
284 #define BOOST_THREAD_PROVIDES_FUTURE_UNWRAP
|
Chris@16
|
285 #endif
|
Chris@16
|
286
|
Chris@16
|
287 // FUTURE_INVALID_AFTER_GET
|
Chris@16
|
288 #if ! defined BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET \
|
Chris@16
|
289 && ! defined BOOST_THREAD_DONT_PROVIDE_FUTURE_INVALID_AFTER_GET
|
Chris@16
|
290 #define BOOST_THREAD_PROVIDES_FUTURE_INVALID_AFTER_GET
|
Chris@16
|
291 #endif
|
Chris@16
|
292
|
Chris@16
|
293 // NESTED_LOCKS
|
Chris@16
|
294 #if ! defined BOOST_THREAD_PROVIDES_NESTED_LOCKS \
|
Chris@16
|
295 && ! defined BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
|
Chris@16
|
296 #define BOOST_THREAD_DONT_PROVIDE_NESTED_LOCKS
|
Chris@16
|
297 #endif
|
Chris@16
|
298
|
Chris@16
|
299 // CONDITION
|
Chris@16
|
300 #if ! defined BOOST_THREAD_PROVIDES_CONDITION \
|
Chris@16
|
301 && ! defined BOOST_THREAD_DONT_PROVIDE_CONDITION
|
Chris@16
|
302 #define BOOST_THREAD_DONT_PROVIDE_CONDITION
|
Chris@16
|
303 #endif
|
Chris@16
|
304
|
Chris@16
|
305 #endif // BOOST_THREAD_VERSION>=4
|
Chris@16
|
306
|
Chris@16
|
307 // INTERRUPTIONS
|
Chris@16
|
308 #if ! defined BOOST_THREAD_PROVIDES_INTERRUPTIONS \
|
Chris@16
|
309 && ! defined BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS
|
Chris@16
|
310 #define BOOST_THREAD_PROVIDES_INTERRUPTIONS
|
Chris@16
|
311 #endif
|
Chris@16
|
312
|
Chris@16
|
313 // CORRELATIONS
|
Chris@16
|
314
|
Chris@16
|
315 // EXPLICIT_LOCK_CONVERSION.
|
Chris@16
|
316 #if defined BOOST_THREAD_PROVIDES_EXPLICIT_LOCK_CONVERSION
|
Chris@16
|
317 #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION explicit
|
Chris@16
|
318 #else
|
Chris@16
|
319 #define BOOST_THREAD_EXPLICIT_LOCK_CONVERSION
|
Chris@16
|
320 #endif
|
Chris@16
|
321
|
Chris@16
|
322 // BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN is defined if BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS
|
Chris@16
|
323 #if defined BOOST_THREAD_PROVIDES_SHARED_MUTEX_UPWARDS_CONVERSIONS \
|
Chris@16
|
324 && ! defined BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
|
Chris@16
|
325 #define BOOST_THREAD_PROVIDES_GENERIC_SHARED_MUTEX_ON_WIN
|
Chris@16
|
326 #endif
|
Chris@16
|
327
|
Chris@16
|
328 // For C++11 call_once interface the compiler MUST support constexpr.
|
Chris@16
|
329 // Otherwise once_flag would be initialized during dynamic initialization stage, which is not thread-safe.
|
Chris@16
|
330 #if defined(BOOST_THREAD_PROVIDES_ONCE_CXX11)
|
Chris@16
|
331 #if defined(BOOST_NO_CXX11_CONSTEXPR)
|
Chris@16
|
332 #undef BOOST_THREAD_PROVIDES_ONCE_CXX11
|
Chris@16
|
333 #endif
|
Chris@16
|
334 #endif
|
Chris@16
|
335
|
Chris@16
|
336 #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_DATETIME
|
Chris@16
|
337 #undef BOOST_THREAD_DONT_USE_DATETIME
|
Chris@16
|
338 #define BOOST_THREAD_USES_DATETIME
|
Chris@16
|
339 #endif
|
Chris@16
|
340
|
Chris@16
|
341 #if defined(BOOST_THREAD_PLATFORM_WIN32) && defined BOOST_THREAD_DONT_USE_CHRONO
|
Chris@16
|
342 #undef BOOST_THREAD_DONT_USE_CHRONO
|
Chris@16
|
343 #define BOOST_THREAD_USES_CHRONO
|
Chris@16
|
344 #endif
|
Chris@16
|
345
|
Chris@16
|
346 // BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55
|
Chris@16
|
347 // BOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0 defined by default up to Boost 1.55
|
Chris@16
|
348 #if defined BOOST_THREAD_PROVIDES_DEPRECATED_FEATURES_SINCE_V3_0_0
|
Chris@16
|
349
|
Chris@16
|
350 #if ! defined BOOST_THREAD_PROVIDES_THREAD_EQ
|
Chris@16
|
351 #define BOOST_THREAD_PROVIDES_THREAD_EQ
|
Chris@16
|
352 #endif
|
Chris@16
|
353
|
Chris@16
|
354 #endif
|
Chris@16
|
355
|
Chris@101
|
356
|
Chris@101
|
357 //#if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES || defined BOOST_THREAD_USES_MOVE
|
Chris@101
|
358 #if ! defined BOOST_NO_CXX11_RVALUE_REFERENCES
|
Chris@101
|
359 #define BOOST_THREAD_FUTURE_USES_OPTIONAL
|
Chris@101
|
360 #endif
|
Chris@101
|
361
|
Chris@16
|
362 #if BOOST_WORKAROUND(__BORLANDC__, < 0x600)
|
Chris@16
|
363 # pragma warn -8008 // Condition always true/false
|
Chris@16
|
364 # pragma warn -8080 // Identifier declared but never used
|
Chris@16
|
365 # pragma warn -8057 // Parameter never used
|
Chris@16
|
366 # pragma warn -8066 // Unreachable code
|
Chris@16
|
367 #endif
|
Chris@16
|
368
|
Chris@16
|
369 #include <boost/thread/detail/platform.hpp>
|
Chris@16
|
370
|
Chris@16
|
371 #if defined(BOOST_THREAD_PLATFORM_WIN32)
|
Chris@16
|
372 #else
|
Chris@16
|
373 # if defined(BOOST_HAS_PTHREAD_DELAY_NP) || defined(BOOST_HAS_NANOSLEEP)
|
Chris@16
|
374 # define BOOST_THREAD_SLEEP_FOR_IS_STEADY
|
Chris@16
|
375 # endif
|
Chris@16
|
376 #endif
|
Chris@16
|
377
|
Chris@16
|
378 // provided for backwards compatibility, since this
|
Chris@16
|
379 // macro was used for several releases by mistake.
|
Chris@16
|
380 #if defined(BOOST_THREAD_DYN_DLL) && ! defined BOOST_THREAD_DYN_LINK
|
Chris@16
|
381 # define BOOST_THREAD_DYN_LINK
|
Chris@16
|
382 #endif
|
Chris@16
|
383
|
Chris@16
|
384 // compatibility with the rest of Boost's auto-linking code:
|
Chris@16
|
385 #if defined(BOOST_THREAD_DYN_LINK) || defined(BOOST_ALL_DYN_LINK)
|
Chris@16
|
386 # undef BOOST_THREAD_USE_LIB
|
Chris@101
|
387 # if !defined(BOOST_THREAD_USE_DLL)
|
Chris@101
|
388 # define BOOST_THREAD_USE_DLL
|
Chris@101
|
389 # endif
|
Chris@16
|
390 #endif
|
Chris@16
|
391
|
Chris@16
|
392 #if defined(BOOST_THREAD_BUILD_DLL) //Build dll
|
Chris@16
|
393 #elif defined(BOOST_THREAD_BUILD_LIB) //Build lib
|
Chris@16
|
394 #elif defined(BOOST_THREAD_USE_DLL) //Use dll
|
Chris@16
|
395 #elif defined(BOOST_THREAD_USE_LIB) //Use lib
|
Chris@16
|
396 #else //Use default
|
Chris@16
|
397 # if defined(BOOST_THREAD_PLATFORM_WIN32)
|
Chris@16
|
398 # if defined(BOOST_MSVC) || defined(BOOST_INTEL_WIN) \
|
Chris@16
|
399 || defined(__MINGW32__) || defined(MINGW32) || defined(BOOST_MINGW32)
|
Chris@16
|
400 //For compilers supporting auto-tss cleanup
|
Chris@16
|
401 //with Boost.Threads lib, use Boost.Threads lib
|
Chris@16
|
402 # define BOOST_THREAD_USE_LIB
|
Chris@16
|
403 # else
|
Chris@16
|
404 //For compilers not yet supporting auto-tss cleanup
|
Chris@16
|
405 //with Boost.Threads lib, use Boost.Threads dll
|
Chris@16
|
406 # define BOOST_THREAD_USE_DLL
|
Chris@16
|
407 # endif
|
Chris@16
|
408 # else
|
Chris@16
|
409 # define BOOST_THREAD_USE_LIB
|
Chris@16
|
410 # endif
|
Chris@16
|
411 #endif
|
Chris@16
|
412
|
Chris@16
|
413 #if defined(BOOST_HAS_DECLSPEC)
|
Chris@16
|
414 # if defined(BOOST_THREAD_BUILD_DLL) //Build dll
|
Chris@16
|
415 # define BOOST_THREAD_DECL BOOST_SYMBOL_EXPORT
|
Chris@16
|
416 //# define BOOST_THREAD_DECL __declspec(dllexport)
|
Chris@16
|
417
|
Chris@16
|
418 # elif defined(BOOST_THREAD_USE_DLL) //Use dll
|
Chris@16
|
419 # define BOOST_THREAD_DECL BOOST_SYMBOL_IMPORT
|
Chris@16
|
420 //# define BOOST_THREAD_DECL __declspec(dllimport)
|
Chris@16
|
421 # else
|
Chris@16
|
422 # define BOOST_THREAD_DECL
|
Chris@16
|
423 # endif
|
Chris@16
|
424 #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4)
|
Chris@16
|
425 # define BOOST_THREAD_DECL BOOST_SYMBOL_VISIBLE
|
Chris@16
|
426
|
Chris@16
|
427 #else
|
Chris@16
|
428 # define BOOST_THREAD_DECL
|
Chris@16
|
429 #endif // BOOST_HAS_DECLSPEC
|
Chris@16
|
430
|
Chris@16
|
431 //
|
Chris@16
|
432 // Automatically link to the correct build variant where possible.
|
Chris@16
|
433 //
|
Chris@16
|
434 #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) && !defined(BOOST_THREAD_BUILD_LIB)
|
Chris@16
|
435 //
|
Chris@16
|
436 // Tell the autolink to link dynamically, this will get undef'ed by auto_link.hpp
|
Chris@16
|
437 // once it's done with it:
|
Chris@16
|
438 //
|
Chris@16
|
439 #if defined(BOOST_THREAD_USE_DLL)
|
Chris@16
|
440 # define BOOST_DYN_LINK
|
Chris@16
|
441 #endif
|
Chris@16
|
442 //
|
Chris@16
|
443 // Set the name of our library, this will get undef'ed by auto_link.hpp
|
Chris@16
|
444 // once it's done with it:
|
Chris@16
|
445 //
|
Chris@16
|
446 #if defined(BOOST_THREAD_LIB_NAME)
|
Chris@16
|
447 # define BOOST_LIB_NAME BOOST_THREAD_LIB_NAME
|
Chris@16
|
448 #else
|
Chris@16
|
449 # define BOOST_LIB_NAME boost_thread
|
Chris@16
|
450 #endif
|
Chris@16
|
451 //
|
Chris@16
|
452 // If we're importing code from a dll, then tell auto_link.hpp about it:
|
Chris@16
|
453 //
|
Chris@16
|
454 // And include the header that does the work:
|
Chris@16
|
455 //
|
Chris@16
|
456 #include <boost/config/auto_link.hpp>
|
Chris@16
|
457 #endif // auto-linking disabled
|
Chris@16
|
458
|
Chris@16
|
459 #endif // BOOST_THREAD_CONFIG_WEK1032003_HPP
|
Chris@16
|
460
|
Chris@16
|
461 // Change Log:
|
Chris@16
|
462 // 22 Jan 05 Roland Schwarz (speedsnail)
|
Chris@16
|
463 // Usage of BOOST_HAS_DECLSPEC macro.
|
Chris@16
|
464 // Default again is static lib usage.
|
Chris@16
|
465 // BOOST_DYN_LINK only defined when autolink included.
|