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