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