]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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> | |
92f5a8d4 | 14 | #include <boost/thread/detail/thread_safety.hpp> |
7c673cae FG |
15 | |
16 | //#define BOOST_THREAD_DONT_PROVIDE_INTERRUPTIONS | |
17 | // ATTRIBUTE_MAY_ALIAS | |
18 | ||
b32b8144 FG |
19 | //#if defined(__GNUC__) && !defined(__INTEL_COMPILER) |
20 | #if !defined(BOOST_NO_MAY_ALIAS) | |
7c673cae | 21 | |
b32b8144 FG |
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. | |
7c673cae FG |
24 | |
25 | #define BOOST_THREAD_DETAIL_USE_ATTRIBUTE_MAY_ALIAS | |
b32b8144 FG |
26 | #endif |
27 | #if defined(BOOST_MAY_ALIAS) | |
28 | #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS BOOST_MAY_ALIAS | |
7c673cae | 29 | #else |
b32b8144 | 30 | #define BOOST_THREAD_ATTRIBUTE_MAY_ALIAS |
7c673cae FG |
31 | #endif |
32 | ||
11fdf7f2 TL |
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 ) | |
92f5a8d4 | 48 | # if defined(BOOST_THREAD_PLATFORM_WIN32) |
11fdf7f2 TL |
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 | ||
7c673cae FG |
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 | |
11fdf7f2 | 127 | #define BOOST_THREAD_RVALUE_REFERENCES_DONT_MATCH_FUNCTION_PTR |
7c673cae FG |
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 | |
92f5a8d4 TL |
341 | |
342 | #if ! defined BOOST_THREAD_PROVIDES_EXECUTORS \ | |
343 | && ! defined BOOST_THREAD_DONT_PROVIDE_EXECUTORS | |
344 | #define BOOST_THREAD_PROVIDES_EXECUTORS | |
345 | #endif | |
346 | ||
7c673cae FG |
347 | #else |
348 | //#define BOOST_THREAD_FUTURE_BLOCKING | |
349 | #define BOOST_THREAD_ASYNC_FUTURE_WAITS | |
350 | #endif | |
92f5a8d4 TL |
351 | |
352 | ||
7c673cae FG |
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(__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 | ||
11fdf7f2 TL |
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 | |
92f5a8d4 TL |
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 | |
11fdf7f2 TL |
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 | ||
7c673cae FG |
452 | // provided for backwards compatibility, since this |
453 | // macro was used for several releases by mistake. | |
b32b8144 | 454 | #if defined(BOOST_THREAD_DYN_DLL) && ! defined(BOOST_THREAD_DYN_LINK) |
7c673cae FG |
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 | //For compilers supporting auto-tss cleanup | |
475 | //with Boost.Threads lib, use Boost.Threads lib | |
476 | # define BOOST_THREAD_USE_LIB | |
477 | # else | |
478 | //For compilers not yet supporting auto-tss cleanup | |
479 | //with Boost.Threads lib, use Boost.Threads dll | |
480 | # define BOOST_THREAD_USE_DLL | |
481 | # endif | |
482 | # else | |
483 | # define BOOST_THREAD_USE_LIB | |
484 | # endif | |
485 | #endif | |
486 | ||
487 | #if defined(BOOST_HAS_DECLSPEC) | |
488 | # if defined(BOOST_THREAD_BUILD_DLL) //Build dll | |
489 | # define BOOST_THREAD_DECL BOOST_SYMBOL_EXPORT | |
490 | //# define BOOST_THREAD_DECL __declspec(dllexport) | |
491 | ||
492 | # elif defined(BOOST_THREAD_USE_DLL) //Use dll | |
493 | # define BOOST_THREAD_DECL BOOST_SYMBOL_IMPORT | |
494 | //# define BOOST_THREAD_DECL __declspec(dllimport) | |
495 | # else | |
496 | # define BOOST_THREAD_DECL | |
497 | # endif | |
498 | #elif (__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || (__GNUC__ > 4) | |
499 | # define BOOST_THREAD_DECL BOOST_SYMBOL_VISIBLE | |
500 | ||
501 | #else | |
502 | # define BOOST_THREAD_DECL | |
503 | #endif // BOOST_HAS_DECLSPEC | |
504 | ||
505 | // | |
506 | // Automatically link to the correct build variant where possible. | |
507 | // | |
508 | #if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_THREAD_NO_LIB) && !defined(BOOST_THREAD_BUILD_DLL) && !defined(BOOST_THREAD_BUILD_LIB) | |
509 | // | |
510 | // Tell the autolink to link dynamically, this will get undef'ed by auto_link.hpp | |
511 | // once it's done with it: | |
512 | // | |
b32b8144 | 513 | #if defined(BOOST_THREAD_USE_DLL) & ! defined(BOOST_DYN_LINK) |
7c673cae FG |
514 | # define BOOST_DYN_LINK |
515 | #endif | |
516 | // | |
517 | // Set the name of our library, this will get undef'ed by auto_link.hpp | |
518 | // once it's done with it: | |
519 | // | |
520 | #if defined(BOOST_THREAD_LIB_NAME) | |
521 | # define BOOST_LIB_NAME BOOST_THREAD_LIB_NAME | |
522 | #else | |
523 | # define BOOST_LIB_NAME boost_thread | |
524 | #endif | |
525 | // | |
526 | // If we're importing code from a dll, then tell auto_link.hpp about it: | |
527 | // | |
528 | // And include the header that does the work: | |
529 | // | |
530 | #include <boost/config/auto_link.hpp> | |
531 | #endif // auto-linking disabled | |
532 | ||
533 | #endif // BOOST_THREAD_CONFIG_WEK1032003_HPP | |
534 | ||
535 | // Change Log: | |
536 | // 22 Jan 05 Roland Schwarz (speedsnail) | |
537 | // Usage of BOOST_HAS_DECLSPEC macro. | |
538 | // Default again is static lib usage. | |
539 | // BOOST_DYN_LINK only defined when autolink included. |