File: tls_8h.html

package info (click to toggle)
wxpython3.0 3.0.2.0%2Bdfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 482,760 kB
  • ctags: 518,293
  • sloc: cpp: 2,127,226; python: 294,045; makefile: 51,942; ansic: 19,033; sh: 3,013; xml: 1,629; perl: 17
file content (155 lines) | stat: -rw-r--r-- 9,539 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>wxWidgets: interface/wx/tls.h File Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="extra_stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="page_container">
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0" style="width: 100%;">
 <tbody>
 <tr>
  <td id="projectlogo">
    <a href="http://www.wxwidgets.org/" target="_new">
      <img alt="wxWidgets" src="logo.png"/>
    </a>
  </td>
  <td style="padding-left: 0.5em; text-align: right;">
   <span id="projectnumber">Version: 3.0.2</span>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- Generated by Doxygen 1.8.2 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Categories</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="dir_60feedc7276cc318b43f4d4f48ac8f8e.html">interface</a></li><li class="navelem"><a class="el" href="dir_4fb5f442218c03949e30a92e7978b03f.html">wx</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#define-members">Macros</a>  </div>
  <div class="headertitle">
<div class="title">tls.h File Reference</div>  </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:aeddd0d67bf87ae5064a9dd8f16021913"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tls_8h.html#aeddd0d67bf87ae5064a9dd8f16021913">wxTLS_TYPE</a>(type)&#160;&#160;&#160;compiler-dependent-implementation</td></tr>
<tr class="memdesc:aeddd0d67bf87ae5064a9dd8f16021913"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to be used for thread-specific variables declarations.  <a href="#aeddd0d67bf87ae5064a9dd8f16021913"></a><br/></td></tr>
<tr class="separator:aeddd0d67bf87ae5064a9dd8f16021913"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a006b3d4d82de2eb0e067e63cfe773b55"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tls_8h.html#a006b3d4d82de2eb0e067e63cfe773b55">wxTLS_VALUE</a>(var)</td></tr>
<tr class="memdesc:a006b3d4d82de2eb0e067e63cfe773b55"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to access thread-specific variables.  <a href="#a006b3d4d82de2eb0e067e63cfe773b55"></a><br/></td></tr>
<tr class="separator:a006b3d4d82de2eb0e067e63cfe773b55"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0077bfcfde11a116e390d2f9b84a5e68"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="tls_8h.html#a0077bfcfde11a116e390d2f9b84a5e68">wxTLS_PTR</a>(var)</td></tr>
<tr class="memdesc:a0077bfcfde11a116e390d2f9b84a5e68"><td class="mdescLeft">&#160;</td><td class="mdescRight">Macro to return address of a thread-specific variables.  <a href="#a0077bfcfde11a116e390d2f9b84a5e68"></a><br/></td></tr>
<tr class="separator:a0077bfcfde11a116e390d2f9b84a5e68"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Macro Definition Documentation</h2>
<a class="anchor" id="a0077bfcfde11a116e390d2f9b84a5e68"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define wxTLS_PTR</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">var</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Macro to return address of a thread-specific variables. </p>
<p>This macro is similar to <a class="el" href="tls_8h.html#a006b3d4d82de2eb0e067e63cfe773b55" title="Macro to access thread-specific variables.">wxTLS_VALUE()</a> except that it always returns a pointer to the type of thread-specific variable.</p>
<p>Notice that this is not a constant expression even if the macro is defined simply as <code>&amp;var</code> &ndash; the value returned is still different for every thread. </p>

</div>
</div>
<a class="anchor" id="aeddd0d67bf87ae5064a9dd8f16021913"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define wxTLS_TYPE</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">type</td><td>)</td>
          <td>&#160;&#160;&#160;compiler-dependent-implementation</td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Macro to be used for thread-specific variables declarations. </p>
<p>This macro can be used to define thread-specific variables of the specified <em>type</em>. Such variables must be global or static and must be POD, i.e. not have any constructors or destructor (even implicitly generated by the compiler due to use of base classes or members which are not POD in a struct).</p>
<p>Example of use: </p>
<div class="fragment"><div class="line"><span class="keyword">struct </span>PerThreadData</div>
<div class="line">{</div>
<div class="line">    ... data which will be different <span class="keywordflow">for</span> every thread ...</div>
<div class="line">};</div>
<div class="line"></div>
<div class="line"><span class="keyword">static</span> <a class="code" href="tls_8h.html#aeddd0d67bf87ae5064a9dd8f16021913" title="Macro to be used for thread-specific variables declarations.">wxTLS_TYPE</a>(PerThreadData) s_threadDataVar;</div>
<div class="line"><span class="preprocessor">#define s_threadData (wxTLS_VALUE(s_threadDataVar))</span></div>
<div class="line"><span class="preprocessor"></span></div>
<div class="line">... use s_threadData as a variable of type PerThreadData ...</div>
</div><!-- fragment --><p>Notice that the use of the ugly <a class="el" href="tls_8h.html#a006b3d4d82de2eb0e067e63cfe773b55" title="Macro to access thread-specific variables.">wxTLS_VALUE()</a> macro is unfortunately required if you need to support platforms without native compiler support for thread-specific variables. If you compile your code only on platforms which do have such support (recent versions of GNU C++ compiler, Microsoft Visual C++ and Sun C++ compiler are known to have it), you can avoid it and use the variable directly. </p>

</div>
</div>
<a class="anchor" id="a006b3d4d82de2eb0e067e63cfe773b55"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">#define wxTLS_VALUE</td>
          <td>(</td>
          <td class="paramtype">&#160;</td>
          <td class="paramname">var</td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">

<p>Macro to access thread-specific variables. </p>
<p>This macro is used to hide the difference in implementation of thread-specific variables under different platforms: they can be of type T used in <a class="el" href="tls_8h.html#aeddd0d67bf87ae5064a9dd8f16021913" title="Macro to be used for thread-specific variables declarations.">wxTLS_TYPE()</a> if they are directly supported by the compiler or of type emulating <code>T</code> <code>*</code>, i.e. a pointer to this type otherwise. This macro always returns an expression of type <code>T</code> itself.</p>
<p>As shown in <a class="el" href="tls_8h.html#aeddd0d67bf87ae5064a9dd8f16021913" title="Macro to be used for thread-specific variables declarations.">wxTLS_TYPE()</a> example, you may want to <code>#define</code> a symbol wrapping a thread-specific variable with this macro. And, as also explained in <a class="el" href="tls_8h.html#aeddd0d67bf87ae5064a9dd8f16021913" title="Macro to be used for thread-specific variables declarations.">wxTLS_TYPE()</a> documentation, you may avoid using it entirely if you target only recent compilers.</p>
<dl class="section see"><dt>See Also</dt><dd><a class="el" href="tls_8h.html#a0077bfcfde11a116e390d2f9b84a5e68" title="Macro to return address of a thread-specific variables.">wxTLS_PTR()</a> </dd></dl>

</div>
</div>
</div><!-- contents -->

<address class="footer">
	<small>
		Generated on Thu Nov 27 2014 13:46:42 for wxWidgets by <a href="http://www.doxygen.org/index.html" target="_new">Doxygen</a> 1.8.2
	</small>
</address>
<script src="wxwidgets.js" type="text/javascript"></script>
</div><!-- #page_container -->
</body>
</html>