]>
Commit | Line | Data |
---|---|---|
1 | ///////////////////////////////////////////////////////////////////////////// | |
2 | // Name: wx/tls.h | |
3 | // Purpose: wxTLS_TYPE() | |
4 | // Author: Vadim Zeitlin | |
5 | // Licence: wxWindows licence | |
6 | ///////////////////////////////////////////////////////////////////////////// | |
7 | ||
8 | /** | |
9 | Macro to be used for thread-specific variables declarations. | |
10 | ||
11 | This macro can be used to define thread-specific variables of the specified | |
12 | @a type. Such variables must be global or static and must be POD, i.e. | |
13 | not have any constructors or destructor (even implicitly generated by the | |
14 | compiler due to use of base classes or members which are not POD in a | |
15 | struct). | |
16 | ||
17 | Example of use: | |
18 | @code | |
19 | struct PerThreadData | |
20 | { | |
21 | ... data which will be different for every thread ... | |
22 | }; | |
23 | ||
24 | static wxTLS_TYPE(PerThreadData) s_threadDataVar; | |
25 | #define s_threadData (wxTLS_VALUE(s_threadDataVar)) | |
26 | ||
27 | ... use s_threadData as a variable of type PerThreadData ... | |
28 | @endcode | |
29 | ||
30 | Notice that the use of the ugly wxTLS_VALUE() macro is unfortunately | |
31 | required if you need to support platforms without native compiler support | |
32 | for thread-specific variables. If you compile your code only on platforms | |
33 | which do have such support (recent versions of GNU C++ compiler, Microsoft | |
34 | Visual C++ and Sun C++ compiler are known to have it), you can avoid it and | |
35 | use the variable directly. | |
36 | */ | |
37 | #define wxTLS_TYPE(type) compiler-dependent-implementation | |
38 | ||
39 | /** | |
40 | Macro to access thread-specific variables. | |
41 | ||
42 | This macro is used to hide the difference in implementation of | |
43 | thread-specific variables under different platforms: they can be of type T | |
44 | used in wxTLS_TYPE() if they are directly supported by the compiler or of | |
45 | type emulating @c T @c *, i.e. a pointer to this type otherwise. This macro | |
46 | always returns an expression of type @c T itself. | |
47 | ||
48 | As shown in wxTLS_TYPE() example, you may want to @c \#define a symbol | |
49 | wrapping a thread-specific variable with this macro. And, as also explained | |
50 | in wxTLS_TYPE() documentation, you may avoid using it entirely if you | |
51 | target only recent compilers. | |
52 | ||
53 | @see wxTLS_PTR() | |
54 | */ | |
55 | #define wxTLS_VALUE(var) | |
56 | ||
57 | /** | |
58 | Macro to return address of a thread-specific variables. | |
59 | ||
60 | This macro is similar to wxTLS_VALUE() except that it always returns a | |
61 | pointer to the type of thread-specific variable. | |
62 | ||
63 | Notice that this is not a constant expression even if the macro is defined | |
64 | simply as @c &var -- the value returned is still different for every | |
65 | thread. | |
66 | */ | |
67 | #define wxTLS_PTR(var) |