1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2<html> 3<head> 4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5<title>Thread Management</title> 6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css"> 7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset"> 9<link rel="up" href="../thread.html" title="Chapter 39. Thread 4.8.0"> 10<link rel="prev" href="future.html" title="Future"> 11<link rel="next" href="ScopedThreads.html" title="Scoped Threads"> 12</head> 13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 14<table cellpadding="2" width="100%"><tr> 15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td> 16<td align="center"><a href="../../../index.html">Home</a></td> 17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td> 18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 20<td align="center"><a href="../../../more/index.htm">More</a></td> 21</tr></table> 22<hr> 23<div class="spirit-nav"> 24<a accesskey="p" href="future.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ScopedThreads.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 25</div> 26<div class="section"> 27<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 28<a name="thread.thread_management"></a><a class="link" href="thread_management.html" title="Thread Management">Thread Management</a> 29</h2></div></div></div> 30<div class="toc"><dl class="toc"> 31<dt><span class="section"><a href="thread_management.html#thread.thread_management.synopsis">Synopsis</a></span></dt> 32<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial">Tutorial</a></span></dt> 33<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread">Class <code class="computeroutput"><span class="identifier">thread</span></code></a></span></dt> 34<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread">Namespace <code class="computeroutput"><span class="identifier">this_thread</span></code></a></span></dt> 35<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup">Class <code class="computeroutput"><span class="identifier">thread_group</span></code> EXTENSION</a></span></dt> 36</dl></div> 37<div class="section"> 38<div class="titlepage"><div><div><h3 class="title"> 39<a name="thread.thread_management.synopsis"></a><a class="link" href="thread_management.html#thread.thread_management.synopsis" title="Synopsis">Synopsis</a> 40</h3></div></div></div> 41<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 42 43<span class="keyword">namespace</span> <span class="identifier">boost</span> 44<span class="special">{</span> 45 <span class="keyword">class</span> <span class="identifier">thread</span><span class="special">;</span> 46 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 47 48 <span class="keyword">namespace</span> <span class="identifier">this_thread</span> 49 <span class="special">{</span> 50 <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 51 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span> 52 <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 53 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 54 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 55 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 56 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 57 <span class="keyword">namespace</span> <span class="identifier">no_interruption_point</span> <span class="comment">// EXTENSION</span> 58 <span class="special">{</span> 59 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 60 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 61 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 62 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 63 <span class="special">}</span> 64 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 65 <span class="keyword">void</span> <span class="identifier">at_thread_exit</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 66 67 <span class="keyword">void</span> <span class="identifier">interruption_point</span><span class="special">();</span> <span class="comment">// EXTENSION</span> 68 <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 69 <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION </span> 70 <span class="keyword">class</span> <span class="identifier">disable_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 71 <span class="keyword">class</span> <span class="identifier">restore_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 72 73 <span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_USES_DATETIME</span> 74 <span class="keyword">template</span> <span class="special"><</span><span class="identifier">TimeDuration</span><span class="special">></span> 75 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 76 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">abs_time</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 77 <span class="preprocessor">#endif</span> 78 <span class="special">}</span> 79 <span class="keyword">class</span> <span class="identifier">thread_group</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 80 81<span class="special">}</span> 82</pre> 83</div> 84<div class="section"> 85<div class="titlepage"><div><div><h3 class="title"> 86<a name="thread.thread_management.tutorial"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial" title="Tutorial">Tutorial</a> 87</h3></div></div></div> 88<div class="toc"><dl class="toc"> 89<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.launching">Launching 90 threads</a></span></dt> 91<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.attributes">Thread 92 attributes</a></span></dt> 93<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.exceptions">Exceptions 94 in thread functions</a></span></dt> 95<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.detach">Detaching 96 thread</a></span></dt> 97<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.join">Joining a thread</a></span></dt> 98<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.destructor1">Destructor 99 V1-2</a></span></dt> 100<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.destructor2">Destructor 101 V3-X</a></span></dt> 102<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.interruption">Interruption</a></span></dt> 103<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.id">Thread IDs</a></span></dt> 104<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.native_in">Using 105 native interfaces with Boost.Thread resources</a></span></dt> 106<dt><span class="section"><a href="thread_management.html#thread.thread_management.tutorial.native_from">Using 107 Boost.Thread interfaces in a native thread</a></span></dt> 108</dl></div> 109<p> 110 The <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 111 class is responsible for launching and managing threads. Each <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object represents a single 112 thread of execution, or <span class="emphasis"><em>Not-a-Thread</em></span>, and at most one 113 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 114 object represents a given thread of execution: objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> are not copyable. 115 </p> 116<p> 117 Objects of type <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> are movable, however, so 118 they can be stored in move-aware containers, and returned from functions. 119 This allows the details of thread creation to be wrapped in a function. 120 </p> 121<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">make_thread</span><span class="special">();</span> 122 123<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> 124<span class="special">{</span> 125 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">some_thread</span><span class="special">=</span><span class="identifier">make_thread</span><span class="special">();</span> 126 <span class="identifier">some_thread</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span> 127<span class="special">}</span> 128</pre> 129<div class="note"><table border="0" summary="Note"> 130<tr> 131<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> 132<th align="left">Note</th> 133</tr> 134<tr><td align="left" valign="top"> 135<p> 136 On compilers that support rvalue references, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> provides a proper move 137 constructor and move-assignment operator, and therefore meets the C++0x 138 <span class="emphasis"><em>MoveConstructible</em></span> and <span class="emphasis"><em>MoveAssignable</em></span> 139 concepts. With such compilers, <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> can therefore be used with 140 containers that support those concepts. 141 </p> 142<p> 143 For other compilers, move support is provided with a move emulation layer, 144 so containers must explicitly detect that move emulation layer. See <boost/thread/detail/move.hpp> 145 for details. 146 </p> 147</td></tr> 148</table></div> 149<div class="section"> 150<div class="titlepage"><div><div><h4 class="title"> 151<a name="thread.thread_management.tutorial.launching"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.launching" title="Launching threads">Launching 152 threads</a> 153</h4></div></div></div> 154<p> 155 A new thread is launched by passing an object of a callable type that can 156 be invoked with no parameters to the constructor. The object is then copied 157 into internal storage, and invoked on the newly-created thread of execution. 158 If the object must not (or cannot) be copied, then <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code> 159 can be used to pass in a reference to the function object. In this case, 160 the user of <span class="bold"><strong>Boost.Thread</strong></span> must ensure that 161 the referred-to object outlives the newly-created thread of execution. 162 </p> 163<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">callable</span> 164<span class="special">{</span> 165 <span class="keyword">void</span> <span class="keyword">operator</span><span class="special">()();</span> 166<span class="special">};</span> 167 168<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">copies_are_safe</span><span class="special">()</span> 169<span class="special">{</span> 170 <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span> 171 <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">(</span><span class="identifier">x</span><span class="special">);</span> 172<span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created thread has a copy, so this is OK</span> 173 174<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">oops</span><span class="special">()</span> 175<span class="special">{</span> 176 <span class="identifier">callable</span> <span class="identifier">x</span><span class="special">;</span> 177 <span class="keyword">return</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">x</span><span class="special">));</span> 178<span class="special">}</span> <span class="comment">// x is destroyed, but the newly-created thread still has a reference</span> 179 <span class="comment">// this leads to undefined behaviour</span> 180</pre> 181<p> 182 If you wish to construct an instance of <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> with a function or callable 183 object that requires arguments to be supplied, this can be done by passing 184 additional arguments to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> constructor: 185 </p> 186<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">find_the_question</span><span class="special">(</span><span class="keyword">int</span> <span class="identifier">the_answer</span><span class="special">);</span> 187 188<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">deep_thought_2</span><span class="special">(</span><span class="identifier">find_the_question</span><span class="special">,</span><span class="number">42</span><span class="special">);</span> 189</pre> 190<p> 191 The arguments are <span class="emphasis"><em>copied</em></span> into the internal thread 192 structure: if a reference is required, use <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">ref</span></code>, 193 just as for references to callable functions. 194 </p> 195<p> 196 There is an unspecified limit on the number of additional arguments that 197 can be passed. 198 </p> 199</div> 200<div class="section"> 201<div class="titlepage"><div><div><h4 class="title"> 202<a name="thread.thread_management.tutorial.attributes"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.attributes" title="Thread attributes">Thread 203 attributes</a> 204</h4></div></div></div> 205<p> 206 Thread launched in this way are created with implementation defined thread 207 attributes as stack size, scheduling, priority, ... or any platform specific 208 attributes. It is not evident how to provide a portable interface that 209 allows the user to set the platform specific attributes. Boost.Thread stay 210 in the middle road through the class thread::attributes which allows to 211 set at least in a portable way the stack size as follows: 212 </p> 213<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span> 214<span class="identifier">attrs</span><span class="special">.</span><span class="identifier">set_stack_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span> 215<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">deep_thought_2</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span> 216</pre> 217<p> 218 Even for this simple attribute there could be portable issues as some platforms 219 could require that the stack size should have a minimal size and/or be 220 a multiple of a given page size. The library adapts the requested size 221 to the platform constraints so that the user doesn't need to take care 222 of it. 223 </p> 224<p> 225 This is the single attribute that is provided in a portable way. In order 226 to set any other thread attribute at construction time the user needs to 227 use non portable code. 228 </p> 229<p> 230 On PThread platforms the user will need to get the thread attributes handle 231 and use it for whatever attribute. 232 </p> 233<p> 234 Next follows how the user could set the stack size and the scheduling policy 235 on PThread platforms. 236 </p> 237<pre class="programlisting"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span> 238<span class="comment">// set portable attributes</span> 239<span class="comment">// ...</span> 240<span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_stack_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span> 241<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_WIN32</span><span class="special">)</span> 242 <span class="comment">// ... window version</span> 243<span class="preprocessor">#elif</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_PTHREAD</span><span class="special">)</span> 244 <span class="comment">// ... pthread version</span> 245 <span class="identifier">pthread_attr_setschedpolicy</span><span class="special">(</span><span class="identifier">attr</span><span class="special">.</span><span class="identifier">native_handle</span><span class="special">(),</span> <span class="identifier">SCHED_RR</span><span class="special">);</span> 246<span class="preprocessor">#else</span> 247<span class="preprocessor">#error</span> <span class="string">"Boost threads unavailable on this platform"</span> 248<span class="preprocessor">#endif</span> 249<span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span> 250</pre> 251<p> 252 On Windows platforms it is not so simple as there is no type that compiles 253 the thread attributes. There is a linked to the creation of a thread on 254 Windows that is emulated via the thread::attributes class. This is the 255 LPSECURITY_ATTRIBUTES lpThreadAttributes. Boost.Thread provides a non portable 256 set_security function so that the user can provide it before the thread 257 creation as follows 258 </p> 259<pre class="programlisting"><span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_THREAD_PLATFORM_WIN32</span><span class="special">)</span> 260 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="identifier">attrs</span><span class="special">;</span> 261 <span class="comment">// set portable attributes</span> 262 <span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_stack_size</span><span class="special">(</span><span class="number">4096</span><span class="special">*</span><span class="number">10</span><span class="special">);</span> 263 <span class="comment">// set non portable attribute</span> 264 <span class="identifier">LPSECURITY_ATTRIBUTES</span> <span class="identifier">sec</span><span class="special">;</span> 265 <span class="comment">// init sec </span> 266 <span class="identifier">attr</span><span class="special">.</span><span class="identifier">set_security</span><span class="special">(</span><span class="identifier">sec</span><span class="special">);</span> 267 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">th</span><span class="special">(</span><span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">find_the_question</span><span class="special">,</span> <span class="number">42</span><span class="special">);</span> 268 <span class="comment">// Set other thread attributes using the native_handle_type.</span> 269 <span class="comment">//...</span> 270<span class="preprocessor">#else</span> 271<span class="preprocessor">#error</span> <span class="string">"Platform not supported"</span> 272<span class="preprocessor">#endif</span> 273</pre> 274</div> 275<div class="section"> 276<div class="titlepage"><div><div><h4 class="title"> 277<a name="thread.thread_management.tutorial.exceptions"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.exceptions" title="Exceptions in thread functions">Exceptions 278 in thread functions</a> 279</h4></div></div></div> 280<p> 281 If the function or callable object passed to the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> constructor propagates 282 an exception when invoked that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, 283 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code> 284 is called. 285 </p> 286</div> 287<div class="section"> 288<div class="titlepage"><div><div><h4 class="title"> 289<a name="thread.thread_management.tutorial.detach"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.detach" title="Detaching thread">Detaching 290 thread</a> 291</h4></div></div></div> 292<p> 293 A thread can be detached by explicitly invoking the <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a> 294 member function on the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. In this case, the 295 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 296 object ceases to represent the now-detached thread, and instead represents 297 <span class="emphasis"><em>Not-a-Thread</em></span>. 298 </p> 299<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 300<span class="special">{</span> 301 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">my_func</span><span class="special">);</span> 302 <span class="identifier">t</span><span class="special">.</span><span class="identifier">detach</span><span class="special">();</span> 303<span class="special">}</span> 304</pre> 305</div> 306<div class="section"> 307<div class="titlepage"><div><div><h4 class="title"> 308<a name="thread.thread_management.tutorial.join"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.join" title="Joining a thread">Joining a thread</a> 309</h4></div></div></div> 310<p> 311 In order to wait for a thread of execution to finish, the <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a>, 312 __join_for or __join_until ( <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join() DEPRECATED"><code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code></a> 313 deprecated) member functions of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object must be used. <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a> will block the calling thread 314 until the thread represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object has completed. 315 </p> 316<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 317<span class="special">{</span> 318 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">my_func</span><span class="special">);</span> 319 <span class="identifier">t</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span> 320<span class="special">}</span> 321</pre> 322<p> 323 If the thread of execution represented by the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object has already completed, 324 or the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 325 object represents <span class="emphasis"><em>Not-a-Thread</em></span>, then <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a> 326 returns immediately. 327 </p> 328<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 329<span class="special">{</span> 330 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">;</span> 331 <span class="identifier">t</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span> <span class="comment">// do nothing</span> 332<span class="special">}</span> 333</pre> 334<p> 335 Timed based join are similar, except that a call to __join_for or __join_until 336 will also return if the thread being waited for does not complete when 337 the specified time has elapsed or reached respectively. 338 </p> 339<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 340<span class="special">{</span> 341 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">;</span> 342 <span class="keyword">if</span> <span class="special">(</span> <span class="identifier">t</span><span class="special">.</span><span class="identifier">join_for</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">milliseconds</span><span class="special">(</span><span class="number">500</span><span class="special">))</span> <span class="special">)</span> 343 <span class="comment">// do something else</span> 344 <span class="identifier">t</span><span class="special">.</span><span class="identifier">join</span><span class="special">();</span> <span class="comment">// join anyway</span> 345<span class="special">}</span> 346</pre> 347</div> 348<div class="section"> 349<div class="titlepage"><div><div><h4 class="title"> 350<a name="thread.thread_management.tutorial.destructor1"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.destructor1" title="Destructor V1-2">Destructor 351 V1-2</a> 352</h4></div></div></div> 353<p> 354 When the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object that represents 355 a thread of execution is destroyed the thread becomes <span class="emphasis"><em>detached</em></span>. 356 Once a thread is detached, it will continue executing until the invocation 357 of the function or callable object supplied on construction has completed, 358 or the program is terminated. A thread can also be detached by explicitly 359 invoking the <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a> 360 member function on the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. In this case, the 361 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 362 object ceases to represent the now-detached thread, and instead represents 363 <span class="emphasis"><em>Not-a-Thread</em></span>. 364 </p> 365</div> 366<div class="section"> 367<div class="titlepage"><div><div><h4 class="title"> 368<a name="thread.thread_management.tutorial.destructor2"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.destructor2" title="Destructor V3-X">Destructor 369 V3-X</a> 370</h4></div></div></div> 371<p> 372 When the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object that represents 373 a thread of execution is destroyed the program terminates if the thread 374 is __joinable__. 375 </p> 376<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 377<span class="special">{</span> 378 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">my_func</span><span class="special">);</span> 379<span class="special">}</span> <span class="comment">// calls std::terminate()</span> 380</pre> 381<p> 382 You can use a thread_joiner to ensure that the thread has been joined at 383 the thread destructor. 384 </p> 385<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> 386<span class="special">{</span> 387 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">my_func</span><span class="special">);</span> 388 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_joiner</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">t</span><span class="special">);</span> 389 <span class="comment">// do something else</span> 390<span class="special">}</span> <span class="comment">// here the thread_joiner destructor will join the thread before it is destroyed.</span> 391</pre> 392</div> 393<div class="section"> 394<div class="titlepage"><div><div><h4 class="title"> 395<a name="thread.thread_management.tutorial.interruption"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.interruption" title="Interruption">Interruption</a> 396</h4></div></div></div> 397<p> 398 A running thread can be <span class="emphasis"><em>interrupted</em></span> by invoking the 399 <a class="link" href="thread_management.html#thread.thread_management.thread.interrupt" title="Member function interrupt() EXTENSION"><code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code></a> 400 member function of the corresponding <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. When the interrupted 401 thread next executes one of the specified <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 402 points</em></span></a> (or if it is currently <span class="emphasis"><em>blocked</em></span> 403 whilst executing one) with interruption enabled, then a <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> 404 exception will be thrown in the interrupted thread. Unless this exception 405 is caught inside the interrupted thread's thread-main function, the stack 406 unwinding process (as with any other exception) causes the destructors 407 with automatic storage duration to be executed. Unlike other exceptions, 408 when <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> is propagated out 409 of thread-main function, this does not cause the call to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span></code>; the effect is as though the 410 thread-main function has returned normally. 411 </p> 412<p> 413 If a thread wishes to avoid being interrupted, it can create an instance 414 of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>. Objects 415 of this class disable interruption for the thread that created them on 416 construction, and restore the interruption state to whatever it was before 417 on destruction: 418 </p> 419<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> 420<span class="special">{</span> 421 <span class="comment">// interruption enabled here</span> 422 <span class="special">{</span> 423 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span> <span class="identifier">di</span><span class="special">;</span> 424 <span class="comment">// interruption disabled</span> 425 <span class="special">{</span> 426 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span> <span class="identifier">di2</span><span class="special">;</span> 427 <span class="comment">// interruption still disabled</span> 428 <span class="special">}</span> <span class="comment">// di2 destroyed, interruption state restored</span> 429 <span class="comment">// interruption still disabled</span> 430 <span class="special">}</span> <span class="comment">// di destroyed, interruption state restored</span> 431 <span class="comment">// interruption now enabled</span> 432<span class="special">}</span> 433</pre> 434<p> 435 The effects of an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> can be temporarily 436 reversed by constructing an instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a>, passing 437 in the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> object in 438 question. This will restore the interruption state to what it was when 439 the <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a> object was 440 constructed, and then disable interruption again when the <a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code></a> object is 441 destroyed. 442 </p> 443<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> 444<span class="special">{</span> 445 <span class="comment">// interruption enabled here</span> 446 <span class="special">{</span> 447 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span> <span class="identifier">di</span><span class="special">;</span> 448 <span class="comment">// interruption disabled</span> 449 <span class="special">{</span> 450 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span> <span class="identifier">ri</span><span class="special">(</span><span class="identifier">di</span><span class="special">);</span> 451 <span class="comment">// interruption now enabled</span> 452 <span class="special">}</span> <span class="comment">// ri destroyed, interruption disable again</span> 453 <span class="special">}</span> <span class="comment">// di destroyed, interruption state restored</span> 454 <span class="comment">// interruption now enabled</span> 455<span class="special">}</span> 456</pre> 457<p> 458 At any point, the interruption state for the current thread can be queried 459 by calling <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a>. 460 </p> 461<a name="interruption_points"></a><h6> 462<a name="thread.thread_management.tutorial.interruption.h0"></a> 463 <span class="phrase"><a name="thread.thread_management.tutorial.interruption.predefined_interruption_points"></a></span><a class="link" href="thread_management.html#thread.thread_management.tutorial.interruption.predefined_interruption_points">Predefined 464 Interruption Points</a> 465 </h6> 466<p> 467 The following functions are <span class="emphasis"><em>interruption points</em></span>, which 468 will throw <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if interruption is 469 enabled for the current thread, and interruption is requested for the current 470 thread: 471 </p> 472<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 473<li class="listitem"> 474 <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">join</span><span class="special">()</span></code></a> 475 </li> 476<li class="listitem"> 477 <a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join() DEPRECATED"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">timed_join</span><span class="special">()</span></code></a> 478 </li> 479<li class="listitem"> 480 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">thread</span></code></a><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_for" title="Member function try_join_for() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_for</span></code></a><span class="special">()</span></code>, 481 </li> 482<li class="listitem"> 483 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">thread</span></code></a><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_until" title="Member function try_join_until() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_until</span></code></a><span class="special">()</span></code>, 484 </li> 485<li class="listitem"> 486 <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait" title="void wait(boost::unique_lock<boost::mutex>& lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a> 487 </li> 488<li class="listitem"> 489 <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.timed_wait" title="bool timed_wait(boost::unique_lock<boost::mutex>& lock,boost::system_time const& abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a> 490 </li> 491<li class="listitem"> 492 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable" title="Class condition_variable"><code class="computeroutput"><span class="identifier">condition_variable</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait_for" title="template <class Rep, class Period> cv_status wait_for(boost::unique_lock<boost::mutex>& lock, const chrono::duration<Rep, Period>& rel_time)"><code class="computeroutput"><span class="identifier">wait_for</span></code></a><span class="special">()</span></code> 493 </li> 494<li class="listitem"> 495 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable" title="Class condition_variable"><code class="computeroutput"><span class="identifier">condition_variable</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable.wait_until" title="template <class Clock, class Duration> cv_status wait_until(boost::unique_lock<boost::mutex>& lock, const chrono::time_point<Clock, Duration>& abs_time)"><code class="computeroutput"><span class="identifier">wait_until</span></code></a><span class="special">()</span></code> 496 </li> 497<li class="listitem"> 498 <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait" title="template<typename lock_type> void wait(lock_type& lock)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">wait</span><span class="special">()</span></code></a> 499 </li> 500<li class="listitem"> 501 <a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.timed_wait" title="template<typename lock_type> bool timed_wait(lock_type& lock,boost::system_time const& abs_time)"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">condition_variable_any</span><span class="special">::</span><span class="identifier">timed_wait</span><span class="special">()</span></code></a> 502 </li> 503<li class="listitem"> 504 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any" title="Class condition_variable_any"><code class="computeroutput"><span class="identifier">condition_variable_any</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait_for" title="template <class lock_type, class Rep, class Period> cv_status wait_for(lock_type& lock, const chrono::duration<Rep, Period>& rel_time)"><code class="computeroutput"><span class="identifier">wait_for</span></code></a><span class="special">()</span></code> 505 </li> 506<li class="listitem"> 507 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any" title="Class condition_variable_any"><code class="computeroutput"><span class="identifier">condition_variable_any</span></code></a><span class="special">::</span><a class="link" href="synchronization.html#thread.synchronization.condvar_ref.condition_variable_any.wait_until" title="template <class lock_type, class Clock, class Duration> cv_status wait_until(lock_type& lock, const chrono::time_point<Clock, Duration>& abs_time)"><code class="computeroutput"><span class="identifier">wait_until</span></code></a><span class="special">()</span></code> 508 </li> 509<li class="listitem"> 510 <a class="link" href="thread_management.html#thread.thread_management.thread.sleep" title="Static member function sleep() DEPRECATED"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">sleep</span><span class="special">()</span></code></a> 511 </li> 512<li class="listitem"> 513 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code> 514 </li> 515<li class="listitem"> 516 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code> 517 </li> 518<li class="listitem"> 519 <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_point</span><span class="special">()</span></code></a> 520 </li> 521</ul></div> 522</div> 523<div class="section"> 524<div class="titlepage"><div><div><h4 class="title"> 525<a name="thread.thread_management.tutorial.id"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.id" title="Thread IDs">Thread IDs</a> 526</h4></div></div></div> 527<p> 528 Objects of class <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> can be used to identify threads. 529 Each running thread of execution has a unique ID obtainable from the corresponding 530 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 531 by calling the <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code> 532 member function, or by calling <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code> from within the thread. Objects of class 533 <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> 534 can be copied, and used as keys in associative containers: the full range 535 of comparison operators is provided. Thread IDs can also be written to 536 an output stream using the stream insertion operator, though the output 537 format is unspecified. 538 </p> 539<p> 540 Each instance of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> either refers to some thread, 541 or <span class="emphasis"><em>Not-a-Thread</em></span>. Instances that refer to <span class="emphasis"><em>Not-a-Thread</em></span> 542 compare equal to each other, but not equal to any instances that refer 543 to an actual thread of execution. The comparison operators on <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> yield a total order for every 544 non-equal thread ID. 545 </p> 546</div> 547<div class="section"> 548<div class="titlepage"><div><div><h4 class="title"> 549<a name="thread.thread_management.tutorial.native_in"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_in" title="Using native interfaces with Boost.Thread resources">Using 550 native interfaces with Boost.Thread resources</a> 551</h4></div></div></div> 552<p> 553 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 554 class has members <code class="computeroutput"><span class="identifier">native_handle_type</span></code> 555 and <code class="computeroutput"><span class="identifier">native_handle</span></code> providing 556 access to the underlying native handle. 557 </p> 558<p> 559 This native handle can be used to change for example the scheduling. 560 </p> 561<p> 562 In general, it is not safe to use this handle with operations that can 563 conflict with the ones provided by Boost.Thread. An example of bad usage 564 could be detaching a thread directly as it will not change the internals 565 of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 566 instance, so for example the joinable function will continue to return 567 true, while the native thread is no more joinable. 568 </p> 569<pre class="programlisting"><span class="identifier">thread</span> <span class="identifier">t</span><span class="special">(</span><span class="identifier">fct</span><span class="special">);</span> 570<span class="identifier">thread</span><span class="special">::</span><span class="identifier">native_handle_type</span> <span class="identifier">hnd</span><span class="special">=</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">native_handle</span><span class="special">();</span> 571<span class="identifier">pthread_detach</span><span class="special">(</span><span class="identifier">hnd</span><span class="special">);</span> 572<span class="identifier">assert</span><span class="special">(</span><span class="identifier">t</span><span class="special">.</span><span class="identifier">joinable</span><span class="special">());</span> 573</pre> 574</div> 575<div class="section"> 576<div class="titlepage"><div><div><h4 class="title"> 577<a name="thread.thread_management.tutorial.native_from"></a><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_from" title="Using Boost.Thread interfaces in a native thread">Using 578 Boost.Thread interfaces in a native thread</a> 579</h4></div></div></div> 580<p> 581 Any thread of execution created using the native interface is called a 582 native thread in this documentation. 583 </p> 584<p> 585 The first example of a native thread of execution is the main thread. 586 </p> 587<p> 588 The user can access to some synchronization functions related to the native 589 current thread using the <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code> 590 <code class="computeroutput"><span class="identifier">yield</span></code>, <code class="computeroutput"><span class="identifier">sleep</span></code>, 591 <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a>, <a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a>, functions. 592 </p> 593<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span> 594 <span class="comment">// ... </span> 595 <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">sleep_for</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">chrono</span><span class="special">::</span><span class="identifier">milliseconds</span><span class="special">(</span><span class="number">10</span><span class="special">));</span> 596 <span class="comment">// ... </span> 597<span class="special">}</span> 598</pre> 599<p> 600 Of course all the synchronization facilities provided by Boost.Thread are 601 also available on native threads. 602 </p> 603<p> 604 The <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span></code> interrupt related functions 605 behave in a degraded mode when called from a thread created using the native 606 interface, i.e. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code> 607 returns false. As consequence the use of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code> 608 and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code> will do nothing 609 and calls to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_point</span><span class="special">()</span></code> 610 will be just ignored. 611 </p> 612<p> 613 As the single way to interrupt a thread is through a <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> instance, <code class="computeroutput"><span class="identifier">interruption_request</span><span class="special">()</span></code> 614 will return false for the native threads. 615 </p> 616<h6> 617<a name="thread.thread_management.tutorial.native_from.h0"></a> 618 <span class="phrase"><a name="thread.thread_management.tutorial.native_from._code__phrase_role__identifier__pthread_exit__phrase___code__posix_limitation"></a></span><a class="link" href="thread_management.html#thread.thread_management.tutorial.native_from._code__phrase_role__identifier__pthread_exit__phrase___code__posix_limitation"><code class="computeroutput"><span class="identifier">pthread_exit</span></code> POSIX limitation</a> 619 </h6> 620<p> 621 <code class="computeroutput"><span class="identifier">pthread_exit</span></code> in glibc/NPTL 622 causes a "forced unwind" that is almost like a C++ exception, 623 but not quite. On Mac OS X, for example, <code class="computeroutput"><span class="identifier">pthread_exit</span></code> 624 unwinds without calling C++ destructors. 625 </p> 626<p> 627 This behavior is incompatible with the current Boost.Thread design, so 628 the use of this function in a POSIX thread result in undefined behavior 629 of any Boost.Thread function. 630 </p> 631</div> 632</div> 633<div class="section"> 634<div class="titlepage"><div><div><h3 class="title"> 635<a name="thread.thread_management.thread"></a><a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread">Class <code class="computeroutput"><span class="identifier">thread</span></code></a> 636</h3></div></div></div> 637<div class="toc"><dl class="toc"> 638<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.default_constructor">Default 639 Constructor</a></span></dt> 640<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.move_constructor">Move 641 Constructor</a></span></dt> 642<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.move_assignment">Move 643 assignment operator</a></span></dt> 644<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.callable_constructor">Thread 645 Constructor</a></span></dt> 646<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attr_callable_constructor">Thread 647 Attributes Constructor EXTENSION</a></span></dt> 648<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.callable_move_constructor">Thread 649 Callable Move Constructor</a></span></dt> 650<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attr_callable_move_constructor">Thread 651 Attributes Move Constructor EXTENSION</a></span></dt> 652<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.multiple_argument_constructor">Thread 653 Constructor with arguments</a></span></dt> 654<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.destructor">Thread 655 Destructor</a></span></dt> 656<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.joinable">Member function 657 <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a></span></dt> 658<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.join">Member function 659 <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a></span></dt> 660<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.timed_join">Member 661 function <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> 662 DEPRECATED</a></span></dt> 663<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.try_join_for">Member 664 function <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code> 665 EXTENSION</a></span></dt> 666<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.try_join_until">Member 667 function <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code> 668 EXTENSION</a></span></dt> 669<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.detach">Member function 670 <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a></span></dt> 671<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.get_id">Member function 672 <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a></span></dt> 673<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.interrupt">Member function 674 <code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code> 675 EXTENSION</a></span></dt> 676<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.hardware_concurrency">Static 677 member function <code class="computeroutput"><span class="identifier">hardware_concurrency</span><span class="special">()</span></code></a></span></dt> 678<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.physical_concurrency">Static 679 member function <code class="computeroutput"><span class="identifier">physical_concurrency</span><span class="special">()</span></code></a></span></dt> 680<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.nativehandle">Member 681 function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a></span></dt> 682<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code> 683 DEPRECATED</a></span></dt> 684<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.not_equals"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code> 685 DEPRECATED</a></span></dt> 686<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.sleep">Static member 687 function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 688 DEPRECATED</a></span></dt> 689<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.yield">Static member 690 function <code class="computeroutput"><span class="identifier">yield</span><span class="special">()</span></code> 691 DEPRECATED</a></span></dt> 692<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.swap">Member function 693 <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt> 694<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.non_member_swap">Non-member 695 function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a></span></dt> 696<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id">Class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a></span></dt> 697<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes">Class 698 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span></code> EXTENSION</a></span></dt> 699</dl></div> 700<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 701 702<span class="keyword">class</span> <span class="identifier">thread</span> 703<span class="special">{</span> 704<span class="keyword">public</span><span class="special">:</span> 705 <span class="keyword">class</span> <span class="identifier">attributes</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 706 707 <span class="identifier">thread</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 708 <span class="special">~</span><span class="identifier">thread</span><span class="special">();</span> 709 710 <span class="identifier">thread</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 711 <span class="identifier">thread</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 712 713 <span class="comment">// move support</span> 714 <span class="identifier">thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&&)</span> <span class="keyword">noexcept</span><span class="special">;</span> 715 <span class="identifier">thread</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread</span><span class="special">&&)</span> <span class="keyword">noexcept</span><span class="special">;</span> 716 717 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> 718 <span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span> 719 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> 720 <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="special">&&</span><span class="identifier">f</span><span class="special">);</span> 721 722 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,...></span> 723 <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">,</span><span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span><span class="identifier">A2</span> <span class="identifier">a2</span><span class="special">,...);</span> 724 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span> 725 <span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span><span class="special">&&</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&&...</span> <span class="identifier">args</span><span class="special">);</span> 726 727 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> 728 <span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">F</span> <span class="identifier">f</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 729 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">></span> 730 <span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">F</span> <span class="special">&&</span><span class="identifier">f</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 731 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span> <span class="keyword">class</span> <span class="special">...</span><span class="identifier">Args</span><span class="special">></span> 732 <span class="keyword">explicit</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">F</span><span class="special">&&</span> <span class="identifier">f</span><span class="special">,</span> <span class="identifier">Args</span><span class="special">&&...</span> <span class="identifier">args</span><span class="special">);</span> 733 734 <span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">x</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 735 736 <span class="keyword">class</span> <span class="identifier">id</span><span class="special">;</span> 737 738 <span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 739 740 <span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 741 <span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span> 742 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 743 <span class="keyword">bool</span> <span class="identifier">try_join_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 744 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 745 <span class="keyword">bool</span> <span class="identifier">try_join_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">t</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 746 747 <span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span> 748 749 <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 750 <span class="keyword">static</span> <span class="keyword">unsigned</span> <span class="identifier">physical_concurrency</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 751 752 <span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span> 753 <span class="identifier">native_handle_type</span> <span class="identifier">native_handle</span><span class="special">();</span> 754 755 <span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span> <span class="comment">// EXTENSION</span> 756 <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 757 758 759<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_USES_DATETIME</span> 760 <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">wait_until</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 761 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span> 762 <span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 763 <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">xt</span><span class="special">);//</span> <span class="identifier">DEPRECATED</span> 764<span class="preprocessor">#endif</span> 765 766<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_PROVIDES_THREAD_EQ</span> 767 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">// DEPRECATED</span> 768 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> <span class="comment">// DEPRECATED</span> 769 770<span class="preprocessor">#endif</span> 771 <span class="keyword">static</span> <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// DEPRECATED</span> 772 773<span class="special">};</span> 774 775<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 776</pre> 777<div class="section"> 778<div class="titlepage"><div><div><h4 class="title"> 779<a name="thread.thread_management.thread.default_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.default_constructor" title="Default Constructor">Default 780 Constructor</a> 781</h4></div></div></div> 782<pre class="programlisting"><span class="identifier">thread</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 783</pre> 784<div class="variablelist"> 785<p class="title"><b></b></p> 786<dl class="variablelist"> 787<dt><span class="term">Effects:</span></dt> 788<dd><p> 789 Constructs a <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> instance that refers 790 to <span class="emphasis"><em>Not-a-Thread</em></span>. 791 </p></dd> 792<dt><span class="term">Postconditions:</span></dt> 793<dd><p> 794 <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code> 795 </p></dd> 796<dt><span class="term">Throws:</span></dt> 797<dd><p> 798 Nothing 799 </p></dd> 800</dl> 801</div> 802</div> 803<div class="section"> 804<div class="titlepage"><div><div><h4 class="title"> 805<a name="thread.thread_management.thread.move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.move_constructor" title="Move Constructor">Move 806 Constructor</a> 807</h4></div></div></div> 808<pre class="programlisting"><span class="identifier">thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 809</pre> 810<div class="variablelist"> 811<p class="title"><b></b></p> 812<dl class="variablelist"> 813<dt><span class="term">Effects:</span></dt> 814<dd><p> 815 Transfers ownership of the thread managed by <code class="computeroutput"><span class="identifier">other</span></code> 816 (if any) to the newly constructed <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> instance. 817 </p></dd> 818<dt><span class="term">Postconditions:</span></dt> 819<dd><p> 820 <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code> 821 and <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code> 822 returns the value of <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the construction 823 </p></dd> 824<dt><span class="term">Throws:</span></dt> 825<dd><p> 826 Nothing 827 </p></dd> 828</dl> 829</div> 830</div> 831<div class="section"> 832<div class="titlepage"><div><div><h4 class="title"> 833<a name="thread.thread_management.thread.move_assignment"></a><a class="link" href="thread_management.html#thread.thread_management.thread.move_assignment" title="Move assignment operator">Move 834 assignment operator</a> 835</h4></div></div></div> 836<pre class="programlisting"><span class="identifier">thread</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="identifier">thread</span><span class="special">&&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 837</pre> 838<div class="variablelist"> 839<p class="title"><b></b></p> 840<dl class="variablelist"> 841<dt><span class="term">Effects:</span></dt> 842<dd> 843<p> 844 Transfers ownership of the thread managed by <code class="computeroutput"><span class="identifier">other</span></code> 845 (if any) to <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 846 </p> 847<p> 848 - if defined BOOST_THREAD_DONT_PROVIDE_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: 849 If the thread is joinable call <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>, 850 DEPRECATED 851 </p> 852<p> 853 - if defined BOOST_THREAD_PROVIDES_THREAD_MOVE_ASSIGN_CALLS_TERMINATE_IF_JOINABLE: 854 If the thread is joinable calls to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>. 855 </p> 856</dd> 857<dt><span class="term">Postconditions:</span></dt> 858<dd><p> 859 <code class="computeroutput"><span class="identifier">other</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code> 860 and <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code> 861 returns the value of <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the assignment. 862 </p></dd> 863<dt><span class="term">Throws:</span></dt> 864<dd><p> 865 Nothing 866 </p></dd> 867</dl> 868</div> 869</div> 870<div class="section"> 871<div class="titlepage"><div><div><h4 class="title"> 872<a name="thread.thread_management.thread.callable_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.callable_constructor" title="Thread Constructor">Thread 873 Constructor</a> 874</h4></div></div></div> 875<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 876<span class="identifier">thread</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> 877</pre> 878<div class="variablelist"> 879<p class="title"><b></b></p> 880<dl class="variablelist"> 881<dt><span class="term">Requires:</span></dt> 882<dd><p> 883 <code class="computeroutput"><span class="identifier">Callable</span></code> must be 884 Copyable and <code class="computeroutput"><span class="identifier">func</span><span class="special">()</span></code> must be a valid expression. 885 </p></dd> 886<dt><span class="term">Effects:</span></dt> 887<dd><p> 888 <code class="computeroutput"><span class="identifier">func</span></code> is copied into 889 storage managed internally by the thread library, and that copy is 890 invoked on a newly-created thread of execution. If this invocation 891 results in an exception being propagated into the internals of the 892 thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, 893 then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code> 894 will be called. Any return value from this invocation is ignored. 895 </p></dd> 896<dt><span class="term">Postconditions:</span></dt> 897<dd><p> 898 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 899 refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>. 900 </p></dd> 901<dt><span class="term">Throws:</span></dt> 902<dd><p> 903 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 904 occurs. 905 </p></dd> 906<dt><span class="term">Error Conditions:</span></dt> 907<dd><p> 908 <span class="bold"><strong>resource_unavailable_try_again</strong></span> : 909 the system lacked the necessary resources to create an- other thread, 910 or the system-imposed limit on the number of threads in a process 911 would be exceeded. 912 </p></dd> 913</dl> 914</div> 915</div> 916<div class="section"> 917<div class="titlepage"><div><div><h4 class="title"> 918<a name="thread.thread_management.thread.attr_callable_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attr_callable_constructor" title="Thread Attributes Constructor EXTENSION">Thread 919 Attributes Constructor EXTENSION</a> 920</h4></div></div></div> 921<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 922<span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> 923</pre> 924<div class="variablelist"> 925<p class="title"><b></b></p> 926<dl class="variablelist"> 927<dt><span class="term">Preconditions:</span></dt> 928<dd><p> 929 <code class="computeroutput"><span class="identifier">Callable</span></code> must be 930 copyable. 931 </p></dd> 932<dt><span class="term">Effects:</span></dt> 933<dd><p> 934 <code class="computeroutput"><span class="identifier">func</span></code> is copied into 935 storage managed internally by the thread library, and that copy is 936 invoked on a newly-created thread of execution with the specified 937 attributes. If this invocation results in an exception being propagated 938 into the internals of the thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code> 939 will be called. Any return value from this invocation is ignored. 940 If the attributes declare the native thread as detached, the boost::thread 941 will be detached. 942 </p></dd> 943<dt><span class="term">Postconditions:</span></dt> 944<dd><p> 945 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 946 refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>. 947 </p></dd> 948<dt><span class="term">Throws:</span></dt> 949<dd><p> 950 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 951 occurs. 952 </p></dd> 953<dt><span class="term">Error Conditions:</span></dt> 954<dd><p> 955 <span class="bold"><strong>resource_unavailable_try_again</strong></span> : 956 the system lacked the necessary resources to create an- other thread, 957 or the system-imposed limit on the number of threads in a process 958 would be exceeded. 959 </p></dd> 960</dl> 961</div> 962</div> 963<div class="section"> 964<div class="titlepage"><div><div><h4 class="title"> 965<a name="thread.thread_management.thread.callable_move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.callable_move_constructor" title="Thread Callable Move Constructor">Thread 966 Callable Move Constructor</a> 967</h4></div></div></div> 968<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 969<span class="identifier">thread</span><span class="special">(</span><span class="identifier">Callable</span> <span class="special">&&</span><span class="identifier">func</span><span class="special">);</span> 970</pre> 971<div class="variablelist"> 972<p class="title"><b></b></p> 973<dl class="variablelist"> 974<dt><span class="term">Preconditions:</span></dt> 975<dd><p> 976 <code class="computeroutput"><span class="identifier">Callable</span></code> must be 977 Movable. 978 </p></dd> 979<dt><span class="term">Effects:</span></dt> 980<dd><p> 981 <code class="computeroutput"><span class="identifier">func</span></code> is moved into 982 storage managed internally by the thread library, and that copy is 983 invoked on a newly-created thread of execution. If this invocation 984 results in an exception being propagated into the internals of the 985 thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, 986 then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code> 987 will be called. Any return value from this invocation is ignored. 988 </p></dd> 989<dt><span class="term">Postconditions:</span></dt> 990<dd><p> 991 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 992 refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>. 993 </p></dd> 994<dt><span class="term">Throws:</span></dt> 995<dd><p> 996 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 997 occurs. 998 </p></dd> 999<dt><span class="term">Error Conditions:</span></dt> 1000<dd><p> 1001 <span class="bold"><strong>resource_unavailable_try_again</strong></span> : 1002 the system lacked the necessary resources to create an- other thread, 1003 or the system-imposed limit on the number of threads in a process 1004 would be exceeded. 1005 </p></dd> 1006</dl> 1007</div> 1008</div> 1009<div class="section"> 1010<div class="titlepage"><div><div><h4 class="title"> 1011<a name="thread.thread_management.thread.attr_callable_move_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attr_callable_move_constructor" title="Thread Attributes Move Constructor EXTENSION">Thread 1012 Attributes Move Constructor EXTENSION</a> 1013</h4></div></div></div> 1014<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 1015<span class="identifier">thread</span><span class="special">(</span><span class="identifier">attributes</span><span class="special">&</span> <span class="identifier">attrs</span><span class="special">,</span> <span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> 1016</pre> 1017<div class="variablelist"> 1018<p class="title"><b></b></p> 1019<dl class="variablelist"> 1020<dt><span class="term">Preconditions:</span></dt> 1021<dd><p> 1022 <code class="computeroutput"><span class="identifier">Callable</span></code> must be 1023 copyable. 1024 </p></dd> 1025<dt><span class="term">Effects:</span></dt> 1026<dd><p> 1027 <code class="computeroutput"><span class="identifier">func</span></code> is copied into 1028 storage managed internally by the thread library, and that copy is 1029 invoked on a newly-created thread of execution with the specified 1030 attributes. If this invocation results in an exception being propagated 1031 into the internals of the thread library that is not of type <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code>, then <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code> 1032 will be called. Any return value from this invocation is ignored. 1033 If the attributes declare the native thread as detached, the boost::thread 1034 will be detached. 1035 </p></dd> 1036<dt><span class="term">Postconditions:</span></dt> 1037<dd><p> 1038 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1039 refers to the newly created thread of execution and <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span><span class="special">()</span></code>. 1040 </p></dd> 1041<dt><span class="term">Throws:</span></dt> 1042<dd><p> 1043 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 1044 occurs. 1045 </p></dd> 1046<dt><span class="term">Error Conditions:</span></dt> 1047<dd><p> 1048 <span class="bold"><strong>resource_unavailable_try_again</strong></span> : 1049 the system lacked the necessary resources to create an- other thread, 1050 or the system-imposed limit on the number of threads in a process 1051 would be exceeded. 1052 </p></dd> 1053</dl> 1054</div> 1055</div> 1056<div class="section"> 1057<div class="titlepage"><div><div><h4 class="title"> 1058<a name="thread.thread_management.thread.multiple_argument_constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.multiple_argument_constructor" title="Thread Constructor with arguments">Thread 1059 Constructor with arguments</a> 1060</h4></div></div></div> 1061<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">F</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A1</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">A2</span><span class="special">,...></span> 1062<span class="identifier">thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">f</span><span class="special">,</span><span class="identifier">A1</span> <span class="identifier">a1</span><span class="special">,</span><span class="identifier">A2</span> <span class="identifier">a2</span><span class="special">,...);</span> 1063</pre> 1064<div class="variablelist"> 1065<p class="title"><b></b></p> 1066<dl class="variablelist"> 1067<dt><span class="term">Preconditions:</span></dt> 1068<dd><p> 1069 <code class="computeroutput"><span class="identifier">F</span></code> and each <code class="computeroutput"><span class="identifier">A</span></code>n must be copyable or movable. 1070 </p></dd> 1071<dt><span class="term">Effects:</span></dt> 1072<dd><p> 1073 As if <a class="link" href="thread_management.html#thread.thread_management.thread.callable_constructor" title="Thread Constructor"><code class="computeroutput"><span class="identifier">thread</span><span class="special">(</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">bind</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span><span class="identifier">a1</span><span class="special">,</span><span class="identifier">a2</span><span class="special">,...))</span></code>. 1074 Consequently, <code class="computeroutput"><span class="identifier">f</span></code> and 1075 each <code class="computeroutput"><span class="identifier">a</span></code>n are copied 1076 into internal storage for access by the new thread.</a> 1077 </p></dd> 1078<dt><span class="term">Postconditions:</span></dt> 1079<dd><p> 1080 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1081 refers to the newly created thread of execution. 1082 </p></dd> 1083<dt><span class="term">Throws:</span></dt> 1084<dd><p> 1085 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 1086 occurs. 1087 </p></dd> 1088<dt><span class="term">Error Conditions:</span></dt> 1089<dd><p> 1090 <span class="bold"><strong>resource_unavailable_try_again</strong></span> : 1091 the system lacked the necessary resources to create an- other thread, 1092 or the system-imposed limit on the number of threads in a process 1093 would be exceeded. 1094 </p></dd> 1095<dt><span class="term">Note:</span></dt> 1096<dd><p> 1097 Currently up to nine additional arguments <code class="computeroutput"><span class="identifier">a1</span></code> 1098 to <code class="computeroutput"><span class="identifier">a9</span></code> can be specified 1099 in addition to the function <code class="computeroutput"><span class="identifier">f</span></code>. 1100 </p></dd> 1101</dl> 1102</div> 1103</div> 1104<div class="section"> 1105<div class="titlepage"><div><div><h4 class="title"> 1106<a name="thread.thread_management.thread.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.destructor" title="Thread Destructor">Thread 1107 Destructor</a> 1108</h4></div></div></div> 1109<pre class="programlisting"><span class="special">~</span><span class="identifier">thread</span><span class="special">();</span> 1110</pre> 1111<div class="variablelist"> 1112<p class="title"><b></b></p> 1113<dl class="variablelist"> 1114<dt><span class="term">Effects:</span></dt> 1115<dd> 1116<p> 1117 - if defined BOOST_THREAD_DONT_PROVIDE_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE: 1118 If the thread is joinable calls <a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()"><code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a>, 1119 DEPRECATED 1120 </p> 1121<p> 1122 - if defined BOOST_THREAD_PROVIDES_THREAD_DESTRUCTOR_CALLS_TERMINATE_IF_JOINABLE: 1123 If the thread is joinable calls to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span></code>. 1124 Destroys <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 1125 </p> 1126</dd> 1127<dt><span class="term">Throws:</span></dt> 1128<dd><p> 1129 Nothing. 1130 </p></dd> 1131<dt><span class="term">Note:</span></dt> 1132<dd><p> 1133 The reason to moving to std::terminate is that either implicitly 1134 detaching or joining a <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code> thread in its destructor could 1135 result in difficult to debug correctness (for <code class="computeroutput"><span class="identifier">detach</span></code>) 1136 or performance (for <code class="computeroutput"><span class="identifier">join</span></code>) 1137 bugs encountered only when an exception is raised. Thus the programmer 1138 must ensure that the destructor is never executed while the thread 1139 is still joinable. Join the thread before destroying or use a scoped 1140 thread. 1141 </p></dd> 1142</dl> 1143</div> 1144</div> 1145<div class="section"> 1146<div class="titlepage"><div><div><h4 class="title"> 1147<a name="thread.thread_management.thread.joinable"></a><a class="link" href="thread_management.html#thread.thread_management.thread.joinable" title="Member function joinable()">Member function 1148 <code class="computeroutput"><span class="identifier">joinable</span><span class="special">()</span></code></a> 1149</h4></div></div></div> 1150<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">joinable</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1151</pre> 1152<div class="variablelist"> 1153<p class="title"><b></b></p> 1154<dl class="variablelist"> 1155<dt><span class="term">Returns:</span></dt> 1156<dd><p> 1157 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1158 refers to a thread of execution, <code class="computeroutput"><span class="keyword">false</span></code> 1159 otherwise. 1160 </p></dd> 1161<dt><span class="term">Throws:</span></dt> 1162<dd><p> 1163 Nothing 1164 </p></dd> 1165</dl> 1166</div> 1167</div> 1168<div class="section"> 1169<div class="titlepage"><div><div><h4 class="title"> 1170<a name="thread.thread_management.thread.join"></a><a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()">Member function 1171 <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a> 1172</h4></div></div></div> 1173<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join</span><span class="special">();</span> 1174</pre> 1175<div class="variablelist"> 1176<p class="title"><b></b></p> 1177<dl class="variablelist"> 1178<dt><span class="term">Preconditions:</span></dt> 1179<dd><p> 1180 the thread is joinable. 1181 </p></dd> 1182<dt><span class="term">Effects:</span></dt> 1183<dd><p> 1184 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1185 refers to a thread of execution, waits for that thread of execution 1186 to complete. 1187 </p></dd> 1188<dt><span class="term">Synchronization:</span></dt> 1189<dd><p> 1190 The completion of the thread represented by <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> synchronizes with the corresponding 1191 successful <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> 1192 return. 1193 </p></dd> 1194<dt><span class="term">Note:</span></dt> 1195<dd><p> 1196 Operations on *this are not synchronized. 1197 </p></dd> 1198<dt><span class="term">Postconditions:</span></dt> 1199<dd><p> 1200 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1201 refers to a thread of execution on entry, that thread of execution 1202 has completed. <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1203 no longer refers to any thread of execution. 1204 </p></dd> 1205<dt><span class="term">Throws:</span></dt> 1206<dd><p> 1207 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 1208 thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code> 1209 </p></dd> 1210<dt><span class="term">Error Conditions:</span></dt> 1211<dd> 1212<p> 1213 <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if 1214 deadlock is detected or <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>. 1215 </p> 1216<p> 1217 <span class="bold"><strong>invalid_argument</strong></span>: if the thread 1218 is not joinable and <code class="computeroutput"><span class="identifier">BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED</span></code> 1219 is defined. 1220 </p> 1221</dd> 1222<dt><span class="term">Notes:</span></dt> 1223<dd><p> 1224 <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> 1225 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1226 points</em></span></a>. 1227 </p></dd> 1228</dl> 1229</div> 1230</div> 1231<div class="section"> 1232<div class="titlepage"><div><div><h4 class="title"> 1233<a name="thread.thread_management.thread.timed_join"></a><a class="link" href="thread_management.html#thread.thread_management.thread.timed_join" title="Member function timed_join() DEPRECATED">Member 1234 function <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> 1235 DEPRECATED</a> 1236</h4></div></div></div> 1237<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">system_time</span><span class="special">&</span> <span class="identifier">wait_until</span><span class="special">);</span> 1238 1239<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span> 1240<span class="keyword">bool</span> <span class="identifier">timed_join</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> 1241</pre> 1242<div class="warning"><table border="0" summary="Warning"> 1243<tr> 1244<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1245<th align="left">Warning</th> 1246</tr> 1247<tr><td align="left" valign="top"> 1248<p> 1249 DEPRECATED since 3.00. 1250 </p> 1251<p> 1252 Use instead <a class="link" href="thread_management.html#thread.thread_management.thread.try_join_for" title="Member function try_join_for() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_for</span></code></a>, <a class="link" href="thread_management.html#thread.thread_management.thread.try_join_until" title="Member function try_join_until() EXTENSION"><code class="computeroutput"><span class="identifier">try_join_until</span></code></a>. 1253 </p> 1254</td></tr> 1255</table></div> 1256<div class="variablelist"> 1257<p class="title"><b></b></p> 1258<dl class="variablelist"> 1259<dt><span class="term">Preconditions:</span></dt> 1260<dd><p> 1261 the thread is joinable. 1262 </p></dd> 1263<dt><span class="term">Effects:</span></dt> 1264<dd><p> 1265 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1266 refers to a thread of execution, waits for that thread of execution 1267 to complete, the time <code class="computeroutput"><span class="identifier">wait_until</span></code> 1268 has been reach or the specified duration <code class="computeroutput"><span class="identifier">rel_time</span></code> 1269 has elapsed. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1270 doesn't refer to a thread of execution, returns immediately. 1271 </p></dd> 1272<dt><span class="term">Returns:</span></dt> 1273<dd><p> 1274 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1275 refers to a thread of execution on entry, and that thread of execution 1276 has completed before the call times out, <code class="computeroutput"><span class="keyword">false</span></code> 1277 otherwise. 1278 </p></dd> 1279<dt><span class="term">Postconditions:</span></dt> 1280<dd><p> 1281 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1282 refers to a thread of execution on entry, and <code class="computeroutput"><span class="identifier">timed_join</span></code> 1283 returns <code class="computeroutput"><span class="keyword">true</span></code>, that thread 1284 of execution has completed, and <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> no longer refers to any thread 1285 of execution. If this call to <code class="computeroutput"><span class="identifier">timed_join</span></code> 1286 returns <code class="computeroutput"><span class="keyword">false</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1287 is unchanged. 1288 </p></dd> 1289<dt><span class="term">Throws:</span></dt> 1290<dd><p> 1291 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 1292 thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code> 1293 </p></dd> 1294<dt><span class="term">Error Conditions:</span></dt> 1295<dd> 1296<p> 1297 <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if 1298 deadlock is detected or this->get_id() == boost::this_thread::get_id(). 1299 </p> 1300<p> 1301 <span class="bold"><strong>invalid_argument</strong></span>: if the thread 1302 is not joinable and BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 1303 is defined. 1304 </p> 1305</dd> 1306<dt><span class="term">Notes:</span></dt> 1307<dd><p> 1308 <code class="computeroutput"><span class="identifier">timed_join</span><span class="special">()</span></code> 1309 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1310 points</em></span></a>. 1311 </p></dd> 1312</dl> 1313</div> 1314</div> 1315<div class="section"> 1316<div class="titlepage"><div><div><h4 class="title"> 1317<a name="thread.thread_management.thread.try_join_for"></a><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_for" title="Member function try_join_for() EXTENSION">Member 1318 function <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code> 1319 EXTENSION</a> 1320</h4></div></div></div> 1321<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 1322<span class="keyword">bool</span> <span class="identifier">try_join_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 1323</pre> 1324<div class="variablelist"> 1325<p class="title"><b></b></p> 1326<dl class="variablelist"> 1327<dt><span class="term">Preconditions:</span></dt> 1328<dd><p> 1329 the thread is joinable. 1330 </p></dd> 1331<dt><span class="term">Effects:</span></dt> 1332<dd><p> 1333 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1334 refers to a thread of execution, waits for that thread of execution 1335 to complete, the specified duration <code class="computeroutput"><span class="identifier">rel_time</span></code> 1336 has elapsed. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1337 doesn't refer to a thread of execution, returns immediately. 1338 </p></dd> 1339<dt><span class="term">Returns:</span></dt> 1340<dd><p> 1341 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1342 refers to a thread of execution on entry, and that thread of execution 1343 has completed before the call times out, <code class="computeroutput"><span class="keyword">false</span></code> 1344 otherwise. 1345 </p></dd> 1346<dt><span class="term">Postconditions:</span></dt> 1347<dd><p> 1348 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1349 refers to a thread of execution on entry, and <code class="computeroutput"><span class="identifier">try_join_for</span></code> 1350 returns <code class="computeroutput"><span class="keyword">true</span></code>, that thread 1351 of execution has completed, and <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> no longer refers to any thread 1352 of execution. If this call to <code class="computeroutput"><span class="identifier">try_join_for</span></code> 1353 returns <code class="computeroutput"><span class="keyword">false</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1354 is unchanged. 1355 </p></dd> 1356<dt><span class="term">Throws:</span></dt> 1357<dd><p> 1358 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 1359 thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code> 1360 </p></dd> 1361<dt><span class="term">Error Conditions:</span></dt> 1362<dd> 1363<p> 1364 <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if 1365 deadlock is detected or this->get_id() == boost::this_thread::get_id(). 1366 </p> 1367<p> 1368 <span class="bold"><strong>invalid_argument</strong></span>: if the thread 1369 is not joinable and BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 1370 is defined. 1371 </p> 1372</dd> 1373<dt><span class="term">Notes:</span></dt> 1374<dd><p> 1375 <code class="computeroutput"><span class="identifier">try_join_for</span><span class="special">()</span></code> 1376 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1377 points</em></span></a>. 1378 </p></dd> 1379</dl> 1380</div> 1381</div> 1382<div class="section"> 1383<div class="titlepage"><div><div><h4 class="title"> 1384<a name="thread.thread_management.thread.try_join_until"></a><a class="link" href="thread_management.html#thread.thread_management.thread.try_join_until" title="Member function try_join_until() EXTENSION">Member 1385 function <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code> 1386 EXTENSION</a> 1387</h4></div></div></div> 1388<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 1389<span class="keyword">bool</span> <span class="identifier">try_join_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 1390</pre> 1391<div class="variablelist"> 1392<p class="title"><b></b></p> 1393<dl class="variablelist"> 1394<dt><span class="term">Preconditions:</span></dt> 1395<dd><p> 1396 the thread is joinable. 1397 </p></dd> 1398<dt><span class="term">Effects:</span></dt> 1399<dd><p> 1400 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1401 refers to a thread of execution, waits for that thread of execution 1402 to complete, the time <code class="computeroutput"><span class="identifier">abs_time</span></code> 1403 has been reach. If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> doesn't refer to a thread of 1404 execution, returns immediately. 1405 </p></dd> 1406<dt><span class="term">Returns:</span></dt> 1407<dd><p> 1408 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1409 refers to a thread of execution on entry, and that thread of execution 1410 has completed before the call times out, <code class="computeroutput"><span class="keyword">false</span></code> 1411 otherwise. 1412 </p></dd> 1413<dt><span class="term">Postconditions:</span></dt> 1414<dd><p> 1415 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1416 refers to a thread of execution on entry, and <code class="computeroutput"><span class="identifier">try_join_until</span></code> 1417 returns <code class="computeroutput"><span class="keyword">true</span></code>, that thread 1418 of execution has completed, and <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> no longer refers to any thread 1419 of execution. If this call to <code class="computeroutput"><span class="identifier">try_join_until</span></code> 1420 returns <code class="computeroutput"><span class="keyword">false</span></code>, <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1421 is unchanged. 1422 </p></dd> 1423<dt><span class="term">Throws:</span></dt> 1424<dd><p> 1425 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 1426 thread of execution is interrupted or <code class="computeroutput"><span class="identifier">system_error</span></code> 1427 </p></dd> 1428<dt><span class="term">Error Conditions:</span></dt> 1429<dd> 1430<p> 1431 <span class="bold"><strong>resource_deadlock_would_occur</strong></span>: if 1432 deadlock is detected or this->get_id() == boost::this_thread::get_id(). 1433 </p> 1434<p> 1435 <span class="bold"><strong>invalid_argument</strong></span>: if the thread 1436 is not joinable and BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 1437 is defined. 1438 </p> 1439</dd> 1440<dt><span class="term">Notes:</span></dt> 1441<dd><p> 1442 <code class="computeroutput"><span class="identifier">try_join_until</span><span class="special">()</span></code> 1443 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1444 points</em></span></a>. 1445 </p></dd> 1446</dl> 1447</div> 1448</div> 1449<div class="section"> 1450<div class="titlepage"><div><div><h4 class="title"> 1451<a name="thread.thread_management.thread.detach"></a><a class="link" href="thread_management.html#thread.thread_management.thread.detach" title="Member function detach()">Member function 1452 <code class="computeroutput"><span class="identifier">detach</span><span class="special">()</span></code></a> 1453</h4></div></div></div> 1454<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">detach</span><span class="special">();</span> 1455</pre> 1456<div class="variablelist"> 1457<p class="title"><b></b></p> 1458<dl class="variablelist"> 1459<dt><span class="term">Preconditions:</span></dt> 1460<dd><p> 1461 the thread is joinable. 1462 </p></dd> 1463<dt><span class="term">Effects:</span></dt> 1464<dd><p> 1465 The thread of execution becomes detached, and no longer has an associated 1466 <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 1467 object. 1468 </p></dd> 1469<dt><span class="term">Postconditions:</span></dt> 1470<dd><p> 1471 <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1472 no longer refers to any thread of execution. 1473 </p></dd> 1474<dt><span class="term">Throws:</span></dt> 1475<dd><p> 1476 <code class="computeroutput"><span class="identifier">system_error</span></code> 1477 </p></dd> 1478<dt><span class="term">Error Conditions:</span></dt> 1479<dd> 1480<p> 1481 <span class="bold"><strong>no_such_process</strong></span>: if the thread is 1482 not valid. 1483 </p> 1484<p> 1485 <span class="bold"><strong>invalid_argument</strong></span>: if the thread 1486 is not joinable and BOOST_THREAD_THROW_IF_PRECONDITION_NOT_SATISFIED 1487 is defined. 1488 </p> 1489</dd> 1490</dl> 1491</div> 1492</div> 1493<div class="section"> 1494<div class="titlepage"><div><div><h4 class="title"> 1495<a name="thread.thread_management.thread.get_id"></a><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()">Member function 1496 <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a> 1497</h4></div></div></div> 1498<pre class="programlisting"><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1499</pre> 1500<div class="variablelist"> 1501<p class="title"><b></b></p> 1502<dl class="variablelist"> 1503<dt><span class="term">Returns:</span></dt> 1504<dd><p> 1505 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1506 refers to a thread of execution, an instance of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> that represents that 1507 thread. Otherwise returns a default-constructed <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a>. 1508 </p></dd> 1509<dt><span class="term">Throws:</span></dt> 1510<dd><p> 1511 Nothing 1512 </p></dd> 1513</dl> 1514</div> 1515</div> 1516<div class="section"> 1517<div class="titlepage"><div><div><h4 class="title"> 1518<a name="thread.thread_management.thread.interrupt"></a><a class="link" href="thread_management.html#thread.thread_management.thread.interrupt" title="Member function interrupt() EXTENSION">Member function 1519 <code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code> 1520 EXTENSION</a> 1521</h4></div></div></div> 1522<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">interrupt</span><span class="special">();</span> 1523</pre> 1524<div class="variablelist"> 1525<p class="title"><b></b></p> 1526<dl class="variablelist"> 1527<dt><span class="term">Effects:</span></dt> 1528<dd><p> 1529 If <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1530 refers to a thread of execution, request that the thread will be 1531 interrupted the next time it enters one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1532 points</em></span></a> with interruption enabled, or if it is currently 1533 <span class="emphasis"><em>blocked</em></span> in a call to one of the predefined 1534 <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption points</em></span></a> 1535 with interruption enabled. Otherwise do noting. 1536 </p></dd> 1537<dt><span class="term">Throws:</span></dt> 1538<dd><p> 1539 Nothing 1540 </p></dd> 1541</dl> 1542</div> 1543</div> 1544<div class="section"> 1545<div class="titlepage"><div><div><h4 class="title"> 1546<a name="thread.thread_management.thread.hardware_concurrency"></a><a class="link" href="thread_management.html#thread.thread_management.thread.hardware_concurrency" title="Static member function hardware_concurrency()">Static 1547 member function <code class="computeroutput"><span class="identifier">hardware_concurrency</span><span class="special">()</span></code></a> 1548</h4></div></div></div> 1549<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">hardware_concurrency</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 1550</pre> 1551<div class="variablelist"> 1552<p class="title"><b></b></p> 1553<dl class="variablelist"> 1554<dt><span class="term">Returns:</span></dt> 1555<dd><p> 1556 The number of hardware threads available on the current system (e.g. 1557 number of CPUs or cores or hyperthreading units), or 0 if this information 1558 is not available. 1559 </p></dd> 1560<dt><span class="term">Throws:</span></dt> 1561<dd><p> 1562 Nothing 1563 </p></dd> 1564</dl> 1565</div> 1566</div> 1567<div class="section"> 1568<div class="titlepage"><div><div><h4 class="title"> 1569<a name="thread.thread_management.thread.physical_concurrency"></a><a class="link" href="thread_management.html#thread.thread_management.thread.physical_concurrency" title="Static member function physical_concurrency()">Static 1570 member function <code class="computeroutput"><span class="identifier">physical_concurrency</span><span class="special">()</span></code></a> 1571</h4></div></div></div> 1572<pre class="programlisting"><span class="keyword">unsigned</span> <span class="identifier">physical_concurrency</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 1573</pre> 1574<div class="variablelist"> 1575<p class="title"><b></b></p> 1576<dl class="variablelist"> 1577<dt><span class="term">Returns:</span></dt> 1578<dd><p> 1579 The number of physical cores available on the current system. In 1580 contrast to <code class="computeroutput"><span class="identifier">hardware_concurrency</span><span class="special">()</span></code> it does not return the number of 1581 virtual cores, but it counts only physical cores. 1582 </p></dd> 1583<dt><span class="term">Throws:</span></dt> 1584<dd><p> 1585 Nothing 1586 </p></dd> 1587</dl> 1588</div> 1589</div> 1590<div class="section"> 1591<div class="titlepage"><div><div><h4 class="title"> 1592<a name="thread.thread_management.thread.nativehandle"></a><a class="link" href="thread_management.html#thread.thread_management.thread.nativehandle" title="Member function native_handle()">Member 1593 function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a> 1594</h4></div></div></div> 1595<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span> 1596<span class="identifier">native_handle_type</span> <span class="identifier">native_handle</span><span class="special">();</span> 1597</pre> 1598<div class="variablelist"> 1599<p class="title"><b></b></p> 1600<dl class="variablelist"> 1601<dt><span class="term">Effects:</span></dt> 1602<dd><p> 1603 Returns an instance of <code class="computeroutput"><span class="identifier">native_handle_type</span></code> 1604 that can be used with platform-specific APIs to manipulate the underlying 1605 implementation. If no such instance exists, <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">native_handle_type</span></code> 1606 are not present. 1607 </p></dd> 1608<dt><span class="term">Throws:</span></dt> 1609<dd><p> 1610 Nothing. 1611 </p></dd> 1612</dl> 1613</div> 1614</div> 1615<div class="section"> 1616<div class="titlepage"><div><div><h4 class="title"> 1617<a name="thread.thread_management.thread.equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.equals" title="operator== DEPRECATED"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code> 1618 DEPRECATED</a> 1619</h4></div></div></div> 1620<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 1621</pre> 1622<div class="warning"><table border="0" summary="Warning"> 1623<tr> 1624<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1625<th align="left">Warning</th> 1626</tr> 1627<tr><td align="left" valign="top"> 1628<p> 1629 DEPRECATED since 4.0.0. 1630 </p> 1631<p> 1632 Use <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()==</span><span class="identifier">b</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()</span></code> 1633 instead`. 1634 </p> 1635</td></tr> 1636</table></div> 1637<div class="variablelist"> 1638<p class="title"><b></b></p> 1639<dl class="variablelist"> 1640<dt><span class="term">Returns:</span></dt> 1641<dd><p> 1642 <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()==</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> 1643 </p></dd> 1644</dl> 1645</div> 1646</div> 1647<div class="section"> 1648<div class="titlepage"><div><div><h4 class="title"> 1649<a name="thread.thread_management.thread.not_equals"></a><a class="link" href="thread_management.html#thread.thread_management.thread.not_equals" title="operator!= DEPRECATED"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code> 1650 DEPRECATED</a> 1651</h4></div></div></div> 1652<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">thread</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span> 1653</pre> 1654<div class="warning"><table border="0" summary="Warning"> 1655<tr> 1656<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1657<th align="left">Warning</th> 1658</tr> 1659<tr><td align="left" valign="top"> 1660<p> 1661 DEPRECATED since 4.0.0. 1662 </p> 1663<p> 1664 Use <code class="computeroutput"><span class="identifier">a</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()!=</span><span class="identifier">b</span><span class="special">.</span><a class="link" href="thread_management.html#thread.thread_management.thread.get_id" title="Member function get_id()"><code class="computeroutput"><span class="identifier">get_id</span></code></a><span class="special">()</span></code> 1665 instead`. 1666 </p> 1667</td></tr> 1668</table></div> 1669<div class="variablelist"> 1670<p class="title"><b></b></p> 1671<dl class="variablelist"> 1672<dt><span class="term">Returns:</span></dt> 1673<dd><p> 1674 <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()!=</span><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> 1675 </p></dd> 1676</dl> 1677</div> 1678</div> 1679<div class="section"> 1680<div class="titlepage"><div><div><h4 class="title"> 1681<a name="thread.thread_management.thread.sleep"></a><a class="link" href="thread_management.html#thread.thread_management.thread.sleep" title="Static member function sleep() DEPRECATED">Static member 1682 function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 1683 DEPRECATED</a> 1684</h4></div></div></div> 1685<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">abs_time</span><span class="special">);</span> 1686</pre> 1687<div class="warning"><table border="0" summary="Warning"> 1688<tr> 1689<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1690<th align="left">Warning</th> 1691</tr> 1692<tr><td align="left" valign="top"> 1693<p> 1694 DEPRECATED since 3.0.0. 1695 </p> 1696<p> 1697 Use <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code> 1698 or <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code>. 1699 </p> 1700</td></tr> 1701</table></div> 1702<div class="variablelist"> 1703<p class="title"><b></b></p> 1704<dl class="variablelist"> 1705<dt><span class="term">Effects:</span></dt> 1706<dd><p> 1707 Suspends the current thread until the specified time has been reached. 1708 </p></dd> 1709<dt><span class="term">Throws:</span></dt> 1710<dd><p> 1711 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 1712 thread of execution is interrupted. 1713 </p></dd> 1714<dt><span class="term">Notes:</span></dt> 1715<dd><p> 1716 <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 1717 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 1718 points</em></span></a>. 1719 </p></dd> 1720</dl> 1721</div> 1722</div> 1723<div class="section"> 1724<div class="titlepage"><div><div><h4 class="title"> 1725<a name="thread.thread_management.thread.yield"></a><a class="link" href="thread_management.html#thread.thread_management.thread.yield" title="Static member function yield() DEPRECATED">Static member 1726 function <code class="computeroutput"><span class="identifier">yield</span><span class="special">()</span></code> 1727 DEPRECATED</a> 1728</h4></div></div></div> 1729<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">yield</span><span class="special">();</span> 1730</pre> 1731<div class="warning"><table border="0" summary="Warning"> 1732<tr> 1733<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 1734<th align="left">Warning</th> 1735</tr> 1736<tr><td align="left" valign="top"> 1737<p> 1738 DEPRECATED since 3.0.0. 1739 </p> 1740<p> 1741 Use <code class="computeroutput"><span class="identifier">this_thread</span><span class="special">::</span><a class="link" href="thread_management.html#thread.thread_management.this_thread.yield" title="Non-member function yield()"><code class="computeroutput"><span class="identifier">yield</span></code></a><span class="special">()</span></code>. 1742 </p> 1743</td></tr> 1744</table></div> 1745<div class="variablelist"> 1746<p class="title"><b></b></p> 1747<dl class="variablelist"> 1748<dt><span class="term">Effects:</span></dt> 1749<dd><p> 1750 See <a class="link" href="thread_management.html#thread.thread_management.this_thread.yield" title="Non-member function yield()"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">yield</span><span class="special">()</span></code></a>. 1751 </p></dd> 1752</dl> 1753</div> 1754</div> 1755<div class="section"> 1756<div class="titlepage"><div><div><h4 class="title"> 1757<a name="thread.thread_management.thread.swap"></a><a class="link" href="thread_management.html#thread.thread_management.thread.swap" title="Member function swap()">Member function 1758 <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a> 1759</h4></div></div></div> 1760<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">other</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 1761</pre> 1762<div class="variablelist"> 1763<p class="title"><b></b></p> 1764<dl class="variablelist"> 1765<dt><span class="term">Effects:</span></dt> 1766<dd><p> 1767 Exchanges the threads of execution associated with <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1768 and <code class="computeroutput"><span class="identifier">other</span></code>, so <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1769 is associated with the thread of execution associated with <code class="computeroutput"><span class="identifier">other</span></code> prior to the call, and vice-versa. 1770 </p></dd> 1771<dt><span class="term">Postconditions:</span></dt> 1772<dd><p> 1773 <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()</span></code> 1774 returns the same value as <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the call. <code class="computeroutput"><span class="identifier">other</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span></code> 1775 returns the same value as <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()</span></code> prior to the call. 1776 </p></dd> 1777<dt><span class="term">Throws:</span></dt> 1778<dd><p> 1779 Nothing. 1780 </p></dd> 1781</dl> 1782</div> 1783</div> 1784<div class="section"> 1785<div class="titlepage"><div><div><h4 class="title"> 1786<a name="thread.thread_management.thread.non_member_swap"></a><a class="link" href="thread_management.html#thread.thread_management.thread.non_member_swap" title="Non-member function swap()">Non-member 1787 function <code class="computeroutput"><span class="identifier">swap</span><span class="special">()</span></code></a> 1788</h4></div></div></div> 1789<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 1790 1791<span class="keyword">void</span> <span class="identifier">swap</span><span class="special">(</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">lhs</span><span class="special">,</span><span class="identifier">thread</span><span class="special">&</span> <span class="identifier">rhs</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 1792</pre> 1793<div class="variablelist"> 1794<p class="title"><b></b></p> 1795<dl class="variablelist"> 1796<dt><span class="term">Effects:</span></dt> 1797<dd><p> 1798 <a class="link" href="thread_management.html#thread.thread_management.thread.swap" title="Member function swap()"><code class="computeroutput"><span class="identifier">lhs</span><span class="special">.</span><span class="identifier">swap</span><span class="special">(</span><span class="identifier">rhs</span><span class="special">)</span></code></a>. 1799 </p></dd> 1800</dl> 1801</div> 1802</div> 1803<div class="section"> 1804<div class="titlepage"><div><div><h4 class="title"> 1805<a name="thread.thread_management.thread.id"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id">Class <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> 1806</h4></div></div></div> 1807<div class="toc"><dl class="toc"> 1808<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.constructor">Default 1809 constructor</a></span></dt> 1810<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.is_equal"><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a></span></dt> 1811<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.not_equal"><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a></span></dt> 1812<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.less_than"><code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code></a></span></dt> 1813<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.greater_than"><code class="computeroutput"><span class="keyword">operator</span><span class="special">></span></code></a></span></dt> 1814<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.less_than_or_equal"><code class="computeroutput"><span class="keyword">operator</span><span class="special"><=</span></code></a></span></dt> 1815<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.greater_than_or_equal"><code class="computeroutput"><span class="keyword">operator</span><span class="special">>=</span></code></a></span></dt> 1816<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.id.stream_out">Friend 1817 <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<</span></code></a></span></dt> 1818</dl></div> 1819<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 1820 1821<span class="keyword">class</span> <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> 1822<span class="special">{</span> 1823<span class="keyword">public</span><span class="special">:</span> 1824 <span class="identifier">id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 1825 1826 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1827 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1828 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1829 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1830 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1831 <span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1832 1833 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> 1834 <span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> 1835 <span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> 1836<span class="special">};</span> 1837</pre> 1838<div class="section"> 1839<div class="titlepage"><div><div><h5 class="title"> 1840<a name="thread.thread_management.thread.id.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.constructor" title="Default constructor">Default 1841 constructor</a> 1842</h5></div></div></div> 1843<pre class="programlisting"><span class="identifier">id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 1844</pre> 1845<div class="variablelist"> 1846<p class="title"><b></b></p> 1847<dl class="variablelist"> 1848<dt><span class="term">Effects:</span></dt> 1849<dd><p> 1850 Constructs a <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> instance that represents 1851 <span class="emphasis"><em>Not-a-Thread</em></span>. 1852 </p></dd> 1853<dt><span class="term">Throws:</span></dt> 1854<dd><p> 1855 Nothing 1856 </p></dd> 1857</dl> 1858</div> 1859</div> 1860<div class="section"> 1861<div class="titlepage"><div><div><h5 class="title"> 1862<a name="thread.thread_management.thread.id.is_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.is_equal" title="operator=="><code class="computeroutput"><span class="keyword">operator</span><span class="special">==</span></code></a> 1863</h5></div></div></div> 1864<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">==(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1865</pre> 1866<div class="variablelist"> 1867<p class="title"><b></b></p> 1868<dl class="variablelist"> 1869<dt><span class="term">Returns:</span></dt> 1870<dd><p> 1871 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1872 and <code class="computeroutput"><span class="identifier">y</span></code> both represent 1873 the same thread of execution, or both represent <span class="emphasis"><em>Not-a-Thread</em></span>, 1874 <code class="computeroutput"><span class="keyword">false</span></code> otherwise. 1875 </p></dd> 1876<dt><span class="term">Throws:</span></dt> 1877<dd><p> 1878 Nothing 1879 </p></dd> 1880</dl> 1881</div> 1882</div> 1883<div class="section"> 1884<div class="titlepage"><div><div><h5 class="title"> 1885<a name="thread.thread_management.thread.id.not_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.not_equal" title="operator!="><code class="computeroutput"><span class="keyword">operator</span><span class="special">!=</span></code></a> 1886</h5></div></div></div> 1887<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">!=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1888</pre> 1889<div class="variablelist"> 1890<p class="title"><b></b></p> 1891<dl class="variablelist"> 1892<dt><span class="term">Returns:</span></dt> 1893<dd><p> 1894 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1895 and <code class="computeroutput"><span class="identifier">y</span></code> represent 1896 different threads of execution, or one represents a thread of execution, 1897 and the other represent <span class="emphasis"><em>Not-a-Thread</em></span>, <code class="computeroutput"><span class="keyword">false</span></code> otherwise. 1898 </p></dd> 1899<dt><span class="term">Throws:</span></dt> 1900<dd><p> 1901 Nothing 1902 </p></dd> 1903</dl> 1904</div> 1905</div> 1906<div class="section"> 1907<div class="titlepage"><div><div><h5 class="title"> 1908<a name="thread.thread_management.thread.id.less_than"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.less_than" title="operator<"><code class="computeroutput"><span class="keyword">operator</span><span class="special"><</span></code></a> 1909</h5></div></div></div> 1910<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1911</pre> 1912<div class="variablelist"> 1913<p class="title"><b></b></p> 1914<dl class="variablelist"> 1915<dt><span class="term">Returns:</span></dt> 1916<dd><p> 1917 <code class="computeroutput"><span class="keyword">true</span></code> if <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span><span class="special">!=</span><span class="identifier">y</span></code> 1918 is <code class="computeroutput"><span class="keyword">true</span></code> and the implementation-defined 1919 total order of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> values places <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 1920 before <code class="computeroutput"><span class="identifier">y</span></code>, <code class="computeroutput"><span class="keyword">false</span></code> otherwise. 1921 </p></dd> 1922<dt><span class="term">Throws:</span></dt> 1923<dd><p> 1924 Nothing 1925 </p></dd> 1926<dt><span class="term">Note:</span></dt> 1927<dd><p> 1928 A <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> instance representing 1929 <span class="emphasis"><em>Not-a-Thread</em></span> will always compare less than 1930 an instance representing a thread of execution. 1931 </p></dd> 1932</dl> 1933</div> 1934</div> 1935<div class="section"> 1936<div class="titlepage"><div><div><h5 class="title"> 1937<a name="thread.thread_management.thread.id.greater_than"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.greater_than" title="operator>"><code class="computeroutput"><span class="keyword">operator</span><span class="special">></span></code></a> 1938</h5></div></div></div> 1939<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1940</pre> 1941<div class="variablelist"> 1942<p class="title"><b></b></p> 1943<dl class="variablelist"> 1944<dt><span class="term">Returns:</span></dt> 1945<dd><p> 1946 <code class="computeroutput"><span class="identifier">y</span><span class="special"><*</span><span class="keyword">this</span></code> 1947 </p></dd> 1948<dt><span class="term">Throws:</span></dt> 1949<dd><p> 1950 Nothing 1951 </p></dd> 1952</dl> 1953</div> 1954</div> 1955<div class="section"> 1956<div class="titlepage"><div><div><h5 class="title"> 1957<a name="thread.thread_management.thread.id.less_than_or_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.less_than_or_equal" title="operator<="><code class="computeroutput"><span class="keyword">operator</span><span class="special"><=</span></code></a> 1958</h5></div></div></div> 1959<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special"><=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1960</pre> 1961<div class="variablelist"> 1962<p class="title"><b></b></p> 1963<dl class="variablelist"> 1964<dt><span class="term">Returns:</span></dt> 1965<dd><p> 1966 <code class="computeroutput"><span class="special">!(</span><span class="identifier">y</span><span class="special"><*</span><span class="keyword">this</span><span class="special">)</span></code> 1967 </p></dd> 1968<dt><span class="term">Throws:</span></dt> 1969<dd><p> 1970 Nothing 1971 </p></dd> 1972</dl> 1973</div> 1974</div> 1975<div class="section"> 1976<div class="titlepage"><div><div><h5 class="title"> 1977<a name="thread.thread_management.thread.id.greater_than_or_equal"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.greater_than_or_equal" title="operator>="><code class="computeroutput"><span class="keyword">operator</span><span class="special">>=</span></code></a> 1978</h5></div></div></div> 1979<pre class="programlisting"><span class="keyword">bool</span> <span class="keyword">operator</span><span class="special">>=(</span><span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">y</span><span class="special">)</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 1980</pre> 1981<div class="variablelist"> 1982<p class="title"><b></b></p> 1983<dl class="variablelist"> 1984<dt><span class="term">Returns:</span></dt> 1985<dd><p> 1986 <code class="computeroutput"><span class="special">!(*</span><span class="keyword">this</span><span class="special"><</span><span class="identifier">y</span><span class="special">)</span></code> 1987 </p></dd> 1988<dt><span class="term">Throws:</span></dt> 1989<dd><p> 1990 Nothing 1991 </p></dd> 1992</dl> 1993</div> 1994</div> 1995<div class="section"> 1996<div class="titlepage"><div><div><h5 class="title"> 1997<a name="thread.thread_management.thread.id.stream_out"></a><a class="link" href="thread_management.html#thread.thread_management.thread.id.stream_out" title="Friend operator<<">Friend 1998 <code class="computeroutput"><span class="keyword">operator</span><span class="special"><<</span></code></a> 1999</h5></div></div></div> 2000<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">charT</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">traits</span><span class="special">></span> 2001<span class="keyword">friend</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> 2002<span class="keyword">operator</span><span class="special"><<(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_ostream</span><span class="special"><</span><span class="identifier">charT</span><span class="special">,</span> <span class="identifier">traits</span><span class="special">>&</span> <span class="identifier">os</span><span class="special">,</span> <span class="keyword">const</span> <span class="identifier">id</span><span class="special">&</span> <span class="identifier">x</span><span class="special">);</span> 2003</pre> 2004<div class="variablelist"> 2005<p class="title"><b></b></p> 2006<dl class="variablelist"> 2007<dt><span class="term">Effects:</span></dt> 2008<dd><p> 2009 Writes a representation of the <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> instance <code class="computeroutput"><span class="identifier">x</span></code> to the stream <code class="computeroutput"><span class="identifier">os</span></code>, such that the representation 2010 of two instances of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> <code class="computeroutput"><span class="identifier">a</span></code> 2011 and <code class="computeroutput"><span class="identifier">b</span></code> is the same 2012 if <code class="computeroutput"><span class="identifier">a</span><span class="special">==</span><span class="identifier">b</span></code>, and different if <code class="computeroutput"><span class="identifier">a</span><span class="special">!=</span><span class="identifier">b</span></code>. 2013 </p></dd> 2014<dt><span class="term">Returns:</span></dt> 2015<dd><p> 2016 <code class="computeroutput"><span class="identifier">os</span></code> 2017 </p></dd> 2018</dl> 2019</div> 2020</div> 2021</div> 2022<div class="section"> 2023<div class="titlepage"><div><div><h4 class="title"> 2024<a name="thread.thread_management.thread.attributes"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes" title="Class boost::thread::attributes EXTENSION">Class 2025 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span></code> EXTENSION</a> 2026</h4></div></div></div> 2027<div class="toc"><dl class="toc"> 2028<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.constructor">Default 2029 constructor</a></span></dt> 2030<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.set_stack_size">Member 2031 function <code class="computeroutput"><span class="identifier">set_stack_size</span><span class="special">()</span></code></a></span></dt> 2032<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.get_stack_size">Member 2033 function <code class="computeroutput"><span class="identifier">get_stack_size</span><span class="special">()</span></code></a></span></dt> 2034<dt><span class="section"><a href="thread_management.html#thread.thread_management.thread.attributes.nativehandle">Member 2035 function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a></span></dt> 2036</dl></div> 2037<pre class="programlisting"><span class="keyword">class</span> <span class="identifier">thread</span><span class="special">::</span><span class="identifier">attributes</span> <span class="special">{</span> 2038<span class="keyword">public</span><span class="special">:</span> 2039 <span class="identifier">attributes</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2040 <span class="special">~</span> <span class="identifier">attributes</span><span class="special">()=</span><span class="keyword">default</span><span class="special">;</span> 2041 <span class="comment">// stack</span> 2042 <span class="keyword">void</span> <span class="identifier">set_stack_size</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 2043 <span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">get_stack_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 2044 2045<span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_DEFINES_THREAD_ATTRIBUTES_NATIVE_HANDLE</span> 2046 <span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span> 2047 <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2048 <span class="keyword">const</span> <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 2049<span class="preprocessor">#endif</span> 2050 2051<span class="special">};</span> 2052</pre> 2053<div class="section"> 2054<div class="titlepage"><div><div><h5 class="title"> 2055<a name="thread.thread_management.thread.attributes.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.constructor" title="Default constructor">Default 2056 constructor</a> 2057</h5></div></div></div> 2058<pre class="programlisting"><span class="identifier">thread_attributes</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2059</pre> 2060<div class="variablelist"> 2061<p class="title"><b></b></p> 2062<dl class="variablelist"> 2063<dt><span class="term">Effects:</span></dt> 2064<dd><p> 2065 Constructs a thread attributes instance with its default values. 2066 </p></dd> 2067<dt><span class="term">Throws:</span></dt> 2068<dd><p> 2069 Nothing 2070 </p></dd> 2071</dl> 2072</div> 2073</div> 2074<div class="section"> 2075<div class="titlepage"><div><div><h5 class="title"> 2076<a name="thread.thread_management.thread.attributes.set_stack_size"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.set_stack_size" title="Member function set_stack_size()">Member 2077 function <code class="computeroutput"><span class="identifier">set_stack_size</span><span class="special">()</span></code></a> 2078</h5></div></div></div> 2079<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">set_stack_size</span><span class="special">(</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">size</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 2080</pre> 2081<div class="variablelist"> 2082<p class="title"><b></b></p> 2083<dl class="variablelist"> 2084<dt><span class="term">Effects:</span></dt> 2085<dd><p> 2086 Stores the stack size to be used to create a thread. This is a 2087 hint that the implementation can choose a better size if to small 2088 or too big or not aligned to a page. 2089 </p></dd> 2090<dt><span class="term">Postconditions:</span></dt> 2091<dd><p> 2092 <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span> 2093 <span class="identifier">get_stack_size</span><span class="special">()</span></code> 2094 returns the chosen stack size. 2095 </p></dd> 2096<dt><span class="term">Throws:</span></dt> 2097<dd><p> 2098 Nothing. 2099 </p></dd> 2100</dl> 2101</div> 2102</div> 2103<div class="section"> 2104<div class="titlepage"><div><div><h5 class="title"> 2105<a name="thread.thread_management.thread.attributes.get_stack_size"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.get_stack_size" title="Member function get_stack_size()">Member 2106 function <code class="computeroutput"><span class="identifier">get_stack_size</span><span class="special">()</span></code></a> 2107</h5></div></div></div> 2108<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">size_t</span> <span class="identifier">get_stack_size</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 2109</pre> 2110<div class="variablelist"> 2111<p class="title"><b></b></p> 2112<dl class="variablelist"> 2113<dt><span class="term">Returns:</span></dt> 2114<dd><p> 2115 The stack size to be used on the creation of a thread. Note that 2116 this function can return 0 meaning the default. 2117 </p></dd> 2118<dt><span class="term">Throws:</span></dt> 2119<dd><p> 2120 Nothing. 2121 </p></dd> 2122</dl> 2123</div> 2124</div> 2125<div class="section"> 2126<div class="titlepage"><div><div><h5 class="title"> 2127<a name="thread.thread_management.thread.attributes.nativehandle"></a><a class="link" href="thread_management.html#thread.thread_management.thread.attributes.nativehandle" title="Member function native_handle()">Member 2128 function <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code></a> 2129</h5></div></div></div> 2130<pre class="programlisting"><span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span> 2131 <span class="keyword">typedef</span> <span class="identifier">platform</span><span class="special">-</span><span class="identifier">specific</span><span class="special">-</span><span class="identifier">type</span> <span class="identifier">native_handle_type</span><span class="special">;</span> 2132 <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2133 <span class="keyword">const</span> <span class="identifier">native_handle_type</span><span class="special">*</span> <span class="identifier">native_handle</span><span class="special">()</span> <span class="keyword">const</span> <span class="keyword">noexcept</span><span class="special">;</span> 2134</pre> 2135<div class="variablelist"> 2136<p class="title"><b></b></p> 2137<dl class="variablelist"> 2138<dt><span class="term">Effects:</span></dt> 2139<dd><p> 2140 Returns an instance of <code class="computeroutput"><span class="identifier">native_handle_type</span></code> 2141 that can be used with platform-specific APIs to manipulate the 2142 underlying thread attributes implementation. If no such instance 2143 exists, <code class="computeroutput"><span class="identifier">native_handle</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">native_handle_type</span></code> 2144 are not present and <code class="computeroutput"><span class="identifier">BOOST_THREAD_DEFINES_THREAD_ATTRIBUTES_NATIVE_HANDLE</span></code> 2145 is not defined. 2146 </p></dd> 2147<dt><span class="term">Throws:</span></dt> 2148<dd><p> 2149 Nothing. 2150 </p></dd> 2151</dl> 2152</div> 2153</div> 2154</div> 2155</div> 2156<div class="section"> 2157<div class="titlepage"><div><div><h3 class="title"> 2158<a name="thread.thread_management.this_thread"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread" title="Namespace this_thread">Namespace <code class="computeroutput"><span class="identifier">this_thread</span></code></a> 2159</h3></div></div></div> 2160<div class="toc"><dl class="toc"> 2161<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.get_id">Non-member 2162 function <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a></span></dt> 2163<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_point">Non-member 2164 function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code> EXTENSION</a></span></dt> 2165<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_requested">Non-member 2166 function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code> EXTENSION</a></span></dt> 2167<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.interruption_enabled">Non-member 2168 function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code> EXTENSION</a></span></dt> 2169<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep">Non-member 2170 function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 2171 DEPRECATED</a></span></dt> 2172<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep_until">Non-member 2173 function <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code></a></span></dt> 2174<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.sleep_for">Non-member 2175 function <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code></a></span></dt> 2176<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.yield">Non-member 2177 function <code class="computeroutput"><span class="identifier">yield</span><span class="special">()</span></code></a></span></dt> 2178<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.disable_interruption">Class 2179 <code class="computeroutput"><span class="identifier">disable_interruption</span></code> EXTENSION</a></span></dt> 2180<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.restore_interruption">Class 2181 <code class="computeroutput"><span class="identifier">restore_interruption</span></code> EXTENSION</a></span></dt> 2182<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.atthreadexit">Non-member 2183 function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code> EXTENSION</a></span></dt> 2184</dl></div> 2185<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 2186 <span class="keyword">namespace</span> <span class="identifier">this_thread</span> <span class="special">{</span> 2187 <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2188 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span> 2189 <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2190 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 2191 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 2192 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 2193 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 2194 2195 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 2196 <span class="keyword">void</span> <span class="identifier">at_thread_exit</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> <span class="comment">// EXTENSION</span> 2197 2198 <span class="keyword">void</span> <span class="identifier">interruption_point</span><span class="special">();</span> <span class="comment">// EXTENSION</span> 2199 <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 2200 <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 2201 <span class="keyword">class</span> <span class="identifier">disable_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 2202 <span class="keyword">class</span> <span class="identifier">restore_interruption</span><span class="special">;</span> <span class="comment">// EXTENSION</span> 2203 2204 <span class="preprocessor">#if</span> <span class="identifier">defined</span> <span class="identifier">BOOST_THREAD_USES_DATETIME</span> 2205 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 2206 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">abs_time</span><span class="special">);</span> <span class="comment">// DEPRECATED</span> 2207 <span class="preprocessor">#endif</span> 2208 <span class="special">}</span> 2209<span class="special">}</span> 2210</pre> 2211<div class="section"> 2212<div class="titlepage"><div><div><h4 class="title"> 2213<a name="thread.thread_management.this_thread.get_id"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.get_id" title="Non-member function get_id()">Non-member 2214 function <code class="computeroutput"><span class="identifier">get_id</span><span class="special">()</span></code></a> 2215</h4></div></div></div> 2216<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2217 2218<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2219<span class="special">{</span> 2220 <span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span> <span class="identifier">get_id</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2221<span class="special">}</span> 2222</pre> 2223<div class="variablelist"> 2224<p class="title"><b></b></p> 2225<dl class="variablelist"> 2226<dt><span class="term">Returns:</span></dt> 2227<dd><p> 2228 An instance of <a class="link" href="thread_management.html#thread.thread_management.thread.id" title="Class boost::thread::id"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span><span class="special">::</span><span class="identifier">id</span></code></a> that represents that 2229 currently executing thread. 2230 </p></dd> 2231<dt><span class="term">Throws:</span></dt> 2232<dd><p> 2233 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> if an error 2234 occurs. 2235 </p></dd> 2236</dl> 2237</div> 2238</div> 2239<div class="section"> 2240<div class="titlepage"><div><div><h4 class="title"> 2241<a name="thread.thread_management.this_thread.interruption_point"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_point" title="Non-member function interruption_point() EXTENSION">Non-member 2242 function <code class="computeroutput"><span class="identifier">interruption_point</span><span class="special">()</span></code> EXTENSION</a> 2243</h4></div></div></div> 2244<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2245 2246<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2247<span class="special">{</span> 2248 <span class="keyword">void</span> <span class="identifier">interruption_point</span><span class="special">();</span> 2249<span class="special">}</span> 2250</pre> 2251<div class="variablelist"> 2252<p class="title"><b></b></p> 2253<dl class="variablelist"> 2254<dt><span class="term">Effects:</span></dt> 2255<dd><p> 2256 Check to see if the current thread has been interrupted. 2257 </p></dd> 2258<dt><span class="term">Throws:</span></dt> 2259<dd><p> 2260 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2261 and <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_requested</span><span class="special">()</span></code></a> 2262 both return <code class="computeroutput"><span class="keyword">true</span></code>. 2263 </p></dd> 2264</dl> 2265</div> 2266</div> 2267<div class="section"> 2268<div class="titlepage"><div><div><h4 class="title"> 2269<a name="thread.thread_management.this_thread.interruption_requested"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_requested" title="Non-member function interruption_requested() EXTENSION">Non-member 2270 function <code class="computeroutput"><span class="identifier">interruption_requested</span><span class="special">()</span></code> EXTENSION</a> 2271</h4></div></div></div> 2272<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2273 2274<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2275<span class="special">{</span> 2276 <span class="keyword">bool</span> <span class="identifier">interruption_requested</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2277<span class="special">}</span> 2278</pre> 2279<div class="variablelist"> 2280<p class="title"><b></b></p> 2281<dl class="variablelist"> 2282<dt><span class="term">Returns:</span></dt> 2283<dd><p> 2284 <code class="computeroutput"><span class="keyword">true</span></code> if interruption 2285 has been requested for the current thread, <code class="computeroutput"><span class="keyword">false</span></code> 2286 otherwise. 2287 </p></dd> 2288<dt><span class="term">Throws:</span></dt> 2289<dd><p> 2290 Nothing. 2291 </p></dd> 2292</dl> 2293</div> 2294</div> 2295<div class="section"> 2296<div class="titlepage"><div><div><h4 class="title"> 2297<a name="thread.thread_management.this_thread.interruption_enabled"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION">Non-member 2298 function <code class="computeroutput"><span class="identifier">interruption_enabled</span><span class="special">()</span></code> EXTENSION</a> 2299</h4></div></div></div> 2300<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2301 2302<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2303<span class="special">{</span> 2304 <span class="keyword">bool</span> <span class="identifier">interruption_enabled</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2305<span class="special">}</span> 2306</pre> 2307<div class="variablelist"> 2308<p class="title"><b></b></p> 2309<dl class="variablelist"> 2310<dt><span class="term">Returns:</span></dt> 2311<dd><p> 2312 <code class="computeroutput"><span class="keyword">true</span></code> if interruption 2313 has been enabled for the current thread, <code class="computeroutput"><span class="keyword">false</span></code> 2314 otherwise. 2315 </p></dd> 2316<dt><span class="term">Throws:</span></dt> 2317<dd><p> 2318 Nothing. 2319 </p></dd> 2320</dl> 2321</div> 2322</div> 2323<div class="section"> 2324<div class="titlepage"><div><div><h4 class="title"> 2325<a name="thread.thread_management.this_thread.sleep"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep" title="Non-member function sleep() DEPRECATED">Non-member 2326 function <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 2327 DEPRECATED</a> 2328</h4></div></div></div> 2329<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2330 2331<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2332<span class="special">{</span> 2333 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">TimeDuration</span><span class="special">></span> 2334 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">TimeDuration</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">rel_time</span><span class="special">);</span> 2335 <span class="keyword">void</span> <span class="identifier">sleep</span><span class="special">(</span><span class="identifier">system_time</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">abs_time</span><span class="special">)</span> 2336<span class="special">}</span> 2337</pre> 2338<div class="warning"><table border="0" summary="Warning"> 2339<tr> 2340<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> 2341<th align="left">Warning</th> 2342</tr> 2343<tr><td align="left" valign="top"> 2344<p> 2345 DEPRECATED since 3.0.0. 2346 </p> 2347<p> 2348 Use <code class="computeroutput"><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()"><code class="computeroutput"><span class="identifier">sleep_for</span></code></a><span class="special">()</span></code> 2349 and <code class="computeroutput"><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()"><code class="computeroutput"><span class="identifier">sleep_until</span></code></a><span class="special">()</span></code> 2350 instead. 2351 </p> 2352</td></tr> 2353</table></div> 2354<div class="variablelist"> 2355<p class="title"><b></b></p> 2356<dl class="variablelist"> 2357<dt><span class="term">Effects:</span></dt> 2358<dd><p> 2359 Suspends the current thread until the time period specified by <code class="computeroutput"><span class="identifier">rel_time</span></code> has elapsed or the time 2360 point specified by <code class="computeroutput"><span class="identifier">abs_time</span></code> 2361 has been reached. 2362 </p></dd> 2363<dt><span class="term">Throws:</span></dt> 2364<dd><p> 2365 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> if the current 2366 thread of execution is interrupted. 2367 </p></dd> 2368<dt><span class="term">Notes:</span></dt> 2369<dd><p> 2370 <code class="computeroutput"><span class="identifier">sleep</span><span class="special">()</span></code> 2371 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2372 points</em></span></a>. 2373 </p></dd> 2374</dl> 2375</div> 2376</div> 2377<div class="section"> 2378<div class="titlepage"><div><div><h4 class="title"> 2379<a name="thread.thread_management.this_thread.sleep_until"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_until" title="Non-member function sleep_until()">Non-member 2380 function <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code></a> 2381</h4></div></div></div> 2382<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2383 2384<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2385<span class="special">{</span> 2386 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 2387 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 2388 <span class="keyword">namespace</span> <span class="identifier">no_interruption_point</span> 2389 <span class="special">{</span> 2390 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Clock</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Duration</span><span class="special">></span> 2391 <span class="keyword">void</span> <span class="identifier">sleep_until</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">time_point</span><span class="special"><</span><span class="identifier">Clock</span><span class="special">,</span> <span class="identifier">Duration</span><span class="special">>&</span> <span class="identifier">abs_time</span><span class="special">);</span> 2392 <span class="special">}</span> 2393<span class="special">}</span> 2394</pre> 2395<div class="variablelist"> 2396<p class="title"><b></b></p> 2397<dl class="variablelist"> 2398<dt><span class="term">Effects:</span></dt> 2399<dd><p> 2400 Suspends the current thread until the time point specified by <code class="computeroutput"><span class="identifier">abs_time</span></code> has been reached. 2401 </p></dd> 2402<dt><span class="term">Throws:</span></dt> 2403<dd><p> 2404 Nothing if Clock satisfies the TrivialClock requirements and operations 2405 of Duration do not throw exceptions. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> 2406 if the current thread of execution is interrupted. 2407 </p></dd> 2408<dt><span class="term">Notes:</span></dt> 2409<dd><p> 2410 <code class="computeroutput"><span class="identifier">sleep_until</span><span class="special">()</span></code> 2411 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2412 points</em></span></a>. 2413 </p></dd> 2414<dt><span class="term">Notes:</span></dt> 2415<dd><p> 2416 <code class="computeroutput"><span class="identifier">no_interruption_point</span><span class="special">::</span><span class="identifier">sleep_until</span><span class="special">()</span></code> is NOT one of the <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2417 points</em></span></a>. 2418 </p></dd> 2419</dl> 2420</div> 2421</div> 2422<div class="section"> 2423<div class="titlepage"><div><div><h4 class="title"> 2424<a name="thread.thread_management.this_thread.sleep_for"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.sleep_for" title="Non-member function sleep_for()">Non-member 2425 function <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code></a> 2426</h4></div></div></div> 2427<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2428 2429<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2430<span class="special">{</span> 2431 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 2432 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 2433 <span class="keyword">namespace</span> <span class="identifier">no_interruption_point</span> 2434 <span class="special">{</span> 2435 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">Rep</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Period</span><span class="special">></span> 2436 <span class="keyword">void</span> <span class="identifier">sleep_for</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">chrono</span><span class="special">::</span><span class="identifier">duration</span><span class="special"><</span><span class="identifier">Rep</span><span class="special">,</span> <span class="identifier">Period</span><span class="special">>&</span> <span class="identifier">rel_time</span><span class="special">);</span> 2437 <span class="special">}</span> 2438<span class="special">}</span> 2439</pre> 2440<div class="variablelist"> 2441<p class="title"><b></b></p> 2442<dl class="variablelist"> 2443<dt><span class="term">Effects:</span></dt> 2444<dd><p> 2445 Suspends the current thread until the duration specified by <code class="computeroutput"><span class="identifier">rel_time</span></code> has elapsed. 2446 </p></dd> 2447<dt><span class="term">Throws:</span></dt> 2448<dd><p> 2449 Nothing if operations of chrono::duration<Rep, Period> do not 2450 throw exceptions. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_interrupted</span></code> 2451 if the current thread of execution is interrupted. 2452 </p></dd> 2453<dt><span class="term">Notes:</span></dt> 2454<dd><p> 2455 <code class="computeroutput"><span class="identifier">sleep_for</span><span class="special">()</span></code> 2456 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2457 points</em></span></a>. 2458 </p></dd> 2459<dt><span class="term">Notes:</span></dt> 2460<dd><p> 2461 <code class="computeroutput"><span class="identifier">no_interruption_point</span><span class="special">::</span> <span class="identifier">sleep_for</span><span class="special">()</span></code> is NOT one of the <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2462 points</em></span></a>. 2463 </p></dd> 2464</dl> 2465</div> 2466</div> 2467<div class="section"> 2468<div class="titlepage"><div><div><h4 class="title"> 2469<a name="thread.thread_management.this_thread.yield"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.yield" title="Non-member function yield()">Non-member 2470 function <code class="computeroutput"><span class="identifier">yield</span><span class="special">()</span></code></a> 2471</h4></div></div></div> 2472<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2473 2474<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2475<span class="special">{</span> 2476 <span class="keyword">void</span> <span class="identifier">yield</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2477<span class="special">}</span> 2478</pre> 2479<div class="variablelist"> 2480<p class="title"><b></b></p> 2481<dl class="variablelist"> 2482<dt><span class="term">Effects:</span></dt> 2483<dd><p> 2484 Gives up the remainder of the current thread's time slice, to allow 2485 other threads to run. 2486 </p></dd> 2487<dt><span class="term">Throws:</span></dt> 2488<dd><p> 2489 Nothing. 2490 </p></dd> 2491</dl> 2492</div> 2493</div> 2494<div class="section"> 2495<div class="titlepage"><div><div><h4 class="title"> 2496<a name="thread.thread_management.this_thread.disable_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION">Class 2497 <code class="computeroutput"><span class="identifier">disable_interruption</span></code> EXTENSION</a> 2498</h4></div></div></div> 2499<div class="toc"><dl class="toc"> 2500<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.disable_interruption.constructor">Constructor</a></span></dt> 2501<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.disable_interruption.destructor">Destructor</a></span></dt> 2502</dl></div> 2503<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2504 2505<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2506<span class="special">{</span> 2507 <span class="keyword">class</span> <span class="identifier">disable_interruption</span> 2508 <span class="special">{</span> 2509 <span class="keyword">public</span><span class="special">:</span> 2510 <span class="identifier">disable_interruption</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">disable_interruption</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2511 <span class="identifier">disable_interruption</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">disable_interruption</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2512 <span class="identifier">disable_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2513 <span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2514 <span class="special">};</span> 2515<span class="special">}</span> 2516</pre> 2517<p> 2518 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code> disables interruption 2519 for the current thread on construction, and restores the prior interruption 2520 state on destruction. Instances of <code class="computeroutput"><span class="identifier">disable_interruption</span></code> 2521 cannot be copied or moved. 2522 </p> 2523<div class="section"> 2524<div class="titlepage"><div><div><h5 class="title"> 2525<a name="thread.thread_management.this_thread.disable_interruption.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption.constructor" title="Constructor">Constructor</a> 2526</h5></div></div></div> 2527<pre class="programlisting"><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2528</pre> 2529<div class="variablelist"> 2530<p class="title"><b></b></p> 2531<dl class="variablelist"> 2532<dt><span class="term">Effects:</span></dt> 2533<dd><p> 2534 Stores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2535 and disables interruption for the current thread. 2536 </p></dd> 2537<dt><span class="term">Postconditions:</span></dt> 2538<dd><p> 2539 <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2540 returns <code class="computeroutput"><span class="keyword">false</span></code> for 2541 the current thread. 2542 </p></dd> 2543<dt><span class="term">Throws:</span></dt> 2544<dd><p> 2545 Nothing. 2546 </p></dd> 2547</dl> 2548</div> 2549</div> 2550<div class="section"> 2551<div class="titlepage"><div><div><h5 class="title"> 2552<a name="thread.thread_management.this_thread.disable_interruption.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption.destructor" title="Destructor">Destructor</a> 2553</h5></div></div></div> 2554<pre class="programlisting"><span class="special">~</span><span class="identifier">disable_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2555</pre> 2556<div class="variablelist"> 2557<p class="title"><b></b></p> 2558<dl class="variablelist"> 2559<dt><span class="term">Preconditions:</span></dt> 2560<dd><p> 2561 Must be called from the same thread from which <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was constructed. 2562 </p></dd> 2563<dt><span class="term">Effects:</span></dt> 2564<dd><p> 2565 Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2566 for the current thread to that prior to the construction of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 2567 </p></dd> 2568<dt><span class="term">Postconditions:</span></dt> 2569<dd><p> 2570 <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2571 for the current thread returns the value stored in the constructor 2572 of <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code>. 2573 </p></dd> 2574<dt><span class="term">Throws:</span></dt> 2575<dd><p> 2576 Nothing. 2577 </p></dd> 2578</dl> 2579</div> 2580</div> 2581</div> 2582<div class="section"> 2583<div class="titlepage"><div><div><h4 class="title"> 2584<a name="thread.thread_management.this_thread.restore_interruption"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption" title="Class restore_interruption EXTENSION">Class 2585 <code class="computeroutput"><span class="identifier">restore_interruption</span></code> EXTENSION</a> 2586</h4></div></div></div> 2587<div class="toc"><dl class="toc"> 2588<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.restore_interruption.constructor">Constructor</a></span></dt> 2589<dt><span class="section"><a href="thread_management.html#thread.thread_management.this_thread.restore_interruption.destructor">Destructor</a></span></dt> 2590</dl></div> 2591<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2592 2593<span class="keyword">namespace</span> <span class="identifier">this_thread</span> 2594<span class="special">{</span> 2595 <span class="keyword">class</span> <span class="identifier">restore_interruption</span> 2596 <span class="special">{</span> 2597 <span class="keyword">public</span><span class="special">:</span> 2598 <span class="identifier">restore_interruption</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">restore_interruption</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2599 <span class="identifier">restore_interruption</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">restore_interruption</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2600 <span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&</span> <span class="identifier">disabler</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 2601 <span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2602 <span class="special">};</span> 2603<span class="special">}</span> 2604</pre> 2605<p> 2606 On construction of an instance of <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">restore_interruption</span></code>, 2607 the interruption state for the current thread is restored to the interruption 2608 state stored by the constructor of the supplied instance of <a class="link" href="thread_management.html#thread.thread_management.this_thread.disable_interruption" title="Class disable_interruption EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">disable_interruption</span></code></a>. When the 2609 instance is destroyed, interruption is again disabled. Instances of <code class="computeroutput"><span class="identifier">restore_interruption</span></code> cannot be copied 2610 or moved. 2611 </p> 2612<div class="section"> 2613<div class="titlepage"><div><div><h5 class="title"> 2614<a name="thread.thread_management.this_thread.restore_interruption.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption.constructor" title="Constructor">Constructor</a> 2615</h5></div></div></div> 2616<pre class="programlisting"><span class="keyword">explicit</span> <span class="identifier">restore_interruption</span><span class="special">(</span><span class="identifier">disable_interruption</span><span class="special">&</span> <span class="identifier">disabler</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">;</span> 2617</pre> 2618<div class="variablelist"> 2619<p class="title"><b></b></p> 2620<dl class="variablelist"> 2621<dt><span class="term">Preconditions:</span></dt> 2622<dd><p> 2623 Must be called from the same thread from which <code class="computeroutput"><span class="identifier">disabler</span></code> 2624 was constructed. 2625 </p></dd> 2626<dt><span class="term">Effects:</span></dt> 2627<dd><p> 2628 Restores the current state of <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2629 for the current thread to that prior to the construction of <code class="computeroutput"><span class="identifier">disabler</span></code>. 2630 </p></dd> 2631<dt><span class="term">Postconditions:</span></dt> 2632<dd><p> 2633 <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2634 for the current thread returns the value stored in the constructor 2635 of <code class="computeroutput"><span class="identifier">disabler</span></code>. 2636 </p></dd> 2637<dt><span class="term">Throws:</span></dt> 2638<dd><p> 2639 Nothing. 2640 </p></dd> 2641</dl> 2642</div> 2643</div> 2644<div class="section"> 2645<div class="titlepage"><div><div><h5 class="title"> 2646<a name="thread.thread_management.this_thread.restore_interruption.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.restore_interruption.destructor" title="Destructor">Destructor</a> 2647</h5></div></div></div> 2648<pre class="programlisting"><span class="special">~</span><span class="identifier">restore_interruption</span><span class="special">()</span> <span class="keyword">noexcept</span><span class="special">;</span> 2649</pre> 2650<div class="variablelist"> 2651<p class="title"><b></b></p> 2652<dl class="variablelist"> 2653<dt><span class="term">Preconditions:</span></dt> 2654<dd><p> 2655 Must be called from the same thread from which <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> was constructed. 2656 </p></dd> 2657<dt><span class="term">Effects:</span></dt> 2658<dd><p> 2659 Disables interruption for the current thread. 2660 </p></dd> 2661<dt><span class="term">Postconditions:</span></dt> 2662<dd><p> 2663 <a class="link" href="thread_management.html#thread.thread_management.this_thread.interruption_enabled" title="Non-member function interruption_enabled() EXTENSION"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">interruption_enabled</span><span class="special">()</span></code></a> 2664 for the current thread returns <code class="computeroutput"><span class="keyword">false</span></code>. 2665 </p></dd> 2666<dt><span class="term">Throws:</span></dt> 2667<dd><p> 2668 Nothing. 2669 </p></dd> 2670</dl> 2671</div> 2672</div> 2673</div> 2674<div class="section"> 2675<div class="titlepage"><div><div><h4 class="title"> 2676<a name="thread.thread_management.this_thread.atthreadexit"></a><a class="link" href="thread_management.html#thread.thread_management.this_thread.atthreadexit" title="Non-member function template at_thread_exit() EXTENSION">Non-member 2677 function template <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code> EXTENSION</a> 2678</h4></div></div></div> 2679<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2680 2681<span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">Callable</span><span class="special">></span> 2682<span class="keyword">void</span> <span class="identifier">at_thread_exit</span><span class="special">(</span><span class="identifier">Callable</span> <span class="identifier">func</span><span class="special">);</span> 2683</pre> 2684<div class="variablelist"> 2685<p class="title"><b></b></p> 2686<dl class="variablelist"> 2687<dt><span class="term">Effects:</span></dt> 2688<dd><p> 2689 A copy of <code class="computeroutput"><span class="identifier">func</span></code> is 2690 placed in thread-specific storage. This copy is invoked when the 2691 current thread exits (even if the thread has been interrupted). 2692 </p></dd> 2693<dt><span class="term">Postconditions:</span></dt> 2694<dd><p> 2695 A copy of <code class="computeroutput"><span class="identifier">func</span></code> has 2696 been saved for invocation on thread exit. 2697 </p></dd> 2698<dt><span class="term">Throws:</span></dt> 2699<dd><p> 2700 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bad_alloc</span></code> if memory cannot be allocated 2701 for the copy of the function, <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread_resource_error</span></code> 2702 if any other error occurs within the thread library. Any exception 2703 thrown whilst copying <code class="computeroutput"><span class="identifier">func</span></code> 2704 into internal storage. 2705 </p></dd> 2706<dt><span class="term">Note:</span></dt> 2707<dd><p> 2708 This function is <span class="bold"><strong>not</strong></span> called if the 2709 thread was terminated forcefully using platform-specific APIs, or 2710 if the thread is terminated due to a call to <code class="computeroutput"><span class="identifier">exit</span><span class="special">()</span></code>, <code class="computeroutput"><span class="identifier">abort</span><span class="special">()</span></code> or <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">terminate</span><span class="special">()</span></code>. In particular, returning from 2711 <code class="computeroutput"><span class="identifier">main</span><span class="special">()</span></code> 2712 is equivalent to call to <code class="computeroutput"><span class="identifier">exit</span><span class="special">()</span></code>, so will not call any functions 2713 registered with <code class="computeroutput"><span class="identifier">at_thread_exit</span><span class="special">()</span></code> 2714 </p></dd> 2715</dl> 2716</div> 2717</div> 2718</div> 2719<div class="section"> 2720<div class="titlepage"><div><div><h3 class="title"> 2721<a name="thread.thread_management.threadgroup"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup" title="Class thread_group EXTENSION">Class <code class="computeroutput"><span class="identifier">thread_group</span></code> EXTENSION</a> 2722</h3></div></div></div> 2723<div class="toc"><dl class="toc"> 2724<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.constructor">Constructor</a></span></dt> 2725<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.destructor">Destructor</a></span></dt> 2726<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.create_thread">Member 2727 function <code class="computeroutput"><span class="identifier">create_thread</span><span class="special">()</span></code></a></span></dt> 2728<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.add_thread">Member 2729 function <code class="computeroutput"><span class="identifier">add_thread</span><span class="special">()</span></code></a></span></dt> 2730<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.remove_thread">Member 2731 function <code class="computeroutput"><span class="identifier">remove_thread</span><span class="special">()</span></code></a></span></dt> 2732<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.join_all">Member 2733 function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a></span></dt> 2734<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.is_this_thread_in">Member 2735 function <code class="computeroutput"><span class="identifier">is_this_thread_in</span><span class="special">()</span></code></a></span></dt> 2736<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.is_thread_in">Member 2737 function <code class="computeroutput"><span class="identifier">is_thread_in</span><span class="special">()</span></code></a></span></dt> 2738<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.interrupt_all">Member 2739 function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a></span></dt> 2740<dt><span class="section"><a href="thread_management.html#thread.thread_management.threadgroup.size">Member function 2741 <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a></span></dt> 2742</dl></div> 2743<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">thread</span><span class="special">/</span><span class="identifier">thread</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 2744 2745<span class="keyword">class</span> <span class="identifier">thread_group</span> 2746<span class="special">{</span> 2747<span class="keyword">public</span><span class="special">:</span> 2748 <span class="identifier">thread_group</span><span class="special">(</span><span class="keyword">const</span> <span class="identifier">thread_group</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2749 <span class="identifier">thread_group</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=(</span><span class="keyword">const</span> <span class="identifier">thread_group</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 2750 2751 <span class="identifier">thread_group</span><span class="special">();</span> 2752 <span class="special">~</span><span class="identifier">thread_group</span><span class="special">();</span> 2753 2754 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">></span> 2755 <span class="identifier">thread</span><span class="special">*</span> <span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">threadfunc</span><span class="special">);</span> 2756 <span class="keyword">void</span> <span class="identifier">add_thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2757 <span class="keyword">void</span> <span class="identifier">remove_thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2758 <span class="keyword">bool</span> <span class="identifier">is_this_thread_in</span><span class="special">();</span> 2759 <span class="keyword">bool</span> <span class="identifier">is_thread_in</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2760 <span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span> 2761 <span class="keyword">void</span> <span class="identifier">interrupt_all</span><span class="special">();</span> 2762 <span class="keyword">int</span> <span class="identifier">size</span><span class="special">()</span> <span class="keyword">const</span><span class="special">;</span> 2763<span class="special">};</span> 2764</pre> 2765<p> 2766 <code class="computeroutput"><span class="identifier">thread_group</span></code> provides for 2767 a collection of threads that are related in some fashion. New threads can 2768 be added to the group with <code class="computeroutput"><span class="identifier">add_thread</span></code> 2769 and <code class="computeroutput"><span class="identifier">create_thread</span></code> member 2770 functions. <code class="computeroutput"><span class="identifier">thread_group</span></code> is 2771 not copyable or movable. 2772 </p> 2773<div class="section"> 2774<div class="titlepage"><div><div><h4 class="title"> 2775<a name="thread.thread_management.threadgroup.constructor"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.constructor" title="Constructor">Constructor</a> 2776</h4></div></div></div> 2777<pre class="programlisting"><span class="identifier">thread_group</span><span class="special">();</span> 2778</pre> 2779<div class="variablelist"> 2780<p class="title"><b></b></p> 2781<dl class="variablelist"> 2782<dt><span class="term">Effects:</span></dt> 2783<dd><p> 2784 Create a new thread group with no threads. 2785 </p></dd> 2786</dl> 2787</div> 2788</div> 2789<div class="section"> 2790<div class="titlepage"><div><div><h4 class="title"> 2791<a name="thread.thread_management.threadgroup.destructor"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.destructor" title="Destructor">Destructor</a> 2792</h4></div></div></div> 2793<pre class="programlisting"><span class="special">~</span><span class="identifier">thread_group</span><span class="special">();</span> 2794</pre> 2795<div class="variablelist"> 2796<p class="title"><b></b></p> 2797<dl class="variablelist"> 2798<dt><span class="term">Effects:</span></dt> 2799<dd><p> 2800 Destroy <code class="computeroutput"><span class="special">*</span><span class="keyword">this</span></code> 2801 and <code class="computeroutput"><span class="keyword">delete</span></code> all <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> 2802 objects in the group. 2803 </p></dd> 2804</dl> 2805</div> 2806</div> 2807<div class="section"> 2808<div class="titlepage"><div><div><h4 class="title"> 2809<a name="thread.thread_management.threadgroup.create_thread"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.create_thread" title="Member function create_thread()">Member 2810 function <code class="computeroutput"><span class="identifier">create_thread</span><span class="special">()</span></code></a> 2811</h4></div></div></div> 2812<pre class="programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">F</span><span class="special">></span> 2813<span class="identifier">thread</span><span class="special">*</span> <span class="identifier">create_thread</span><span class="special">(</span><span class="identifier">F</span> <span class="identifier">threadfunc</span><span class="special">);</span> 2814</pre> 2815<div class="variablelist"> 2816<p class="title"><b></b></p> 2817<dl class="variablelist"> 2818<dt><span class="term">Effects:</span></dt> 2819<dd><p> 2820 Create a new <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object as-if by 2821 <code class="computeroutput"><span class="keyword">new</span> <span class="identifier">thread</span><span class="special">(</span><span class="identifier">threadfunc</span><span class="special">)</span></code> and add it to the group. 2822 </p></dd> 2823<dt><span class="term">Postcondition:</span></dt> 2824<dd><p> 2825 <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">size</span><span class="special">()</span></code> 2826 is increased by one, the new thread is running. 2827 </p></dd> 2828<dt><span class="term">Returns:</span></dt> 2829<dd><p> 2830 A pointer to the new <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object. 2831 </p></dd> 2832</dl> 2833</div> 2834</div> 2835<div class="section"> 2836<div class="titlepage"><div><div><h4 class="title"> 2837<a name="thread.thread_management.threadgroup.add_thread"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.add_thread" title="Member function add_thread()">Member 2838 function <code class="computeroutput"><span class="identifier">add_thread</span><span class="special">()</span></code></a> 2839</h4></div></div></div> 2840<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">add_thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2841</pre> 2842<div class="variablelist"> 2843<p class="title"><b></b></p> 2844<dl class="variablelist"> 2845<dt><span class="term">Precondition:</span></dt> 2846<dd><p> 2847 The expression <code class="computeroutput"><span class="keyword">delete</span> <span class="identifier">thrd</span></code> is well-formed and will not 2848 result in undefined behaviour and <code class="computeroutput"><span class="identifier">is_thread_in</span><span class="special">(</span><span class="identifier">thrd</span><span class="special">)</span> <span class="special">==</span> <span class="keyword">false</span></code>. 2849 </p></dd> 2850<dt><span class="term">Effects:</span></dt> 2851<dd><p> 2852 Take ownership of the <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object pointed to 2853 by <code class="computeroutput"><span class="identifier">thrd</span></code> and add it 2854 to the group. 2855 </p></dd> 2856<dt><span class="term">Postcondition:</span></dt> 2857<dd><p> 2858 <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">size</span><span class="special">()</span></code> 2859 is increased by one. 2860 </p></dd> 2861</dl> 2862</div> 2863</div> 2864<div class="section"> 2865<div class="titlepage"><div><div><h4 class="title"> 2866<a name="thread.thread_management.threadgroup.remove_thread"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.remove_thread" title="Member function remove_thread()">Member 2867 function <code class="computeroutput"><span class="identifier">remove_thread</span><span class="special">()</span></code></a> 2868</h4></div></div></div> 2869<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">remove_thread</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2870</pre> 2871<div class="variablelist"> 2872<p class="title"><b></b></p> 2873<dl class="variablelist"> 2874<dt><span class="term">Effects:</span></dt> 2875<dd><p> 2876 If <code class="computeroutput"><span class="identifier">thrd</span></code> is a member 2877 of the group, remove it without calling <code class="computeroutput"><span class="keyword">delete</span></code>. 2878 </p></dd> 2879<dt><span class="term">Postcondition:</span></dt> 2880<dd><p> 2881 If <code class="computeroutput"><span class="identifier">thrd</span></code> was a member 2882 of the group, <code class="computeroutput"><span class="keyword">this</span><span class="special">-></span><span class="identifier">size</span><span class="special">()</span></code> 2883 is decreased by one. 2884 </p></dd> 2885</dl> 2886</div> 2887</div> 2888<div class="section"> 2889<div class="titlepage"><div><div><h4 class="title"> 2890<a name="thread.thread_management.threadgroup.join_all"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.join_all" title="Member function join_all()">Member 2891 function <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code></a> 2892</h4></div></div></div> 2893<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">join_all</span><span class="special">();</span> 2894</pre> 2895<div class="variablelist"> 2896<p class="title"><b></b></p> 2897<dl class="variablelist"> 2898<dt><span class="term">Requires:</span></dt> 2899<dd><p> 2900 <code class="computeroutput"><span class="identifier">is_this_thread_in</span><span class="special">()</span> <span class="special">==</span> <span class="keyword">false</span></code>. 2901 </p></dd> 2902<dt><span class="term">Effects:</span></dt> 2903<dd><p> 2904 Call <code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code> 2905 on each <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object in the group. 2906 </p></dd> 2907<dt><span class="term">Postcondition:</span></dt> 2908<dd><p> 2909 Every thread in the group has terminated. 2910 </p></dd> 2911<dt><span class="term">Note:</span></dt> 2912<dd><p> 2913 Since <a class="link" href="thread_management.html#thread.thread_management.thread.join" title="Member function join()"><code class="computeroutput"><span class="identifier">join</span><span class="special">()</span></code></a> 2914 is one of the predefined <a class="link" href="thread_management.html#interruption_points"><span class="emphasis"><em>interruption 2915 points</em></span></a>, <code class="computeroutput"><span class="identifier">join_all</span><span class="special">()</span></code> is also an interruption point. 2916 </p></dd> 2917</dl> 2918</div> 2919</div> 2920<div class="section"> 2921<div class="titlepage"><div><div><h4 class="title"> 2922<a name="thread.thread_management.threadgroup.is_this_thread_in"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.is_this_thread_in" title="Member function is_this_thread_in()">Member 2923 function <code class="computeroutput"><span class="identifier">is_this_thread_in</span><span class="special">()</span></code></a> 2924</h4></div></div></div> 2925<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_this_thread_in</span><span class="special">();</span> 2926</pre> 2927<div class="variablelist"> 2928<p class="title"><b></b></p> 2929<dl class="variablelist"> 2930<dt><span class="term">Returns:</span></dt> 2931<dd><p> 2932 true if there is a thread <code class="computeroutput"><span class="identifier">th</span></code> 2933 in the group such that <code class="computeroutput"><span class="identifier">th</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">this_thread</span><span class="special">::</span><span class="identifier">get_id</span><span class="special">()</span></code>. 2934 </p></dd> 2935</dl> 2936</div> 2937</div> 2938<div class="section"> 2939<div class="titlepage"><div><div><h4 class="title"> 2940<a name="thread.thread_management.threadgroup.is_thread_in"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.is_thread_in" title="Member function is_thread_in()">Member 2941 function <code class="computeroutput"><span class="identifier">is_thread_in</span><span class="special">()</span></code></a> 2942</h4></div></div></div> 2943<pre class="programlisting"><span class="keyword">bool</span> <span class="identifier">is_thread_in</span><span class="special">(</span><span class="identifier">thread</span><span class="special">*</span> <span class="identifier">thrd</span><span class="special">);</span> 2944</pre> 2945<div class="variablelist"> 2946<p class="title"><b></b></p> 2947<dl class="variablelist"> 2948<dt><span class="term">Returns:</span></dt> 2949<dd><p> 2950 true if there is a thread <code class="computeroutput"><span class="identifier">th</span></code> 2951 in the group such that <code class="computeroutput"><span class="identifier">th</span><span class="special">.</span><span class="identifier">get_id</span><span class="special">()</span> <span class="special">==</span> <span class="identifier">thrd</span><span class="special">-></span><span class="identifier">get_id</span><span class="special">()</span></code>. 2952 </p></dd> 2953</dl> 2954</div> 2955</div> 2956<div class="section"> 2957<div class="titlepage"><div><div><h4 class="title"> 2958<a name="thread.thread_management.threadgroup.interrupt_all"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.interrupt_all" title="Member function interrupt_all()">Member 2959 function <code class="computeroutput"><span class="identifier">interrupt_all</span><span class="special">()</span></code></a> 2960</h4></div></div></div> 2961<pre class="programlisting"><span class="keyword">void</span> <span class="identifier">interrupt_all</span><span class="special">();</span> 2962</pre> 2963<div class="variablelist"> 2964<p class="title"><b></b></p> 2965<dl class="variablelist"> 2966<dt><span class="term">Effects:</span></dt> 2967<dd><p> 2968 Call <code class="computeroutput"><span class="identifier">interrupt</span><span class="special">()</span></code> 2969 on each <a class="link" href="thread_management.html#thread.thread_management.thread" title="Class thread"><code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">thread</span></code></a> object in the group. 2970 </p></dd> 2971</dl> 2972</div> 2973</div> 2974<div class="section"> 2975<div class="titlepage"><div><div><h4 class="title"> 2976<a name="thread.thread_management.threadgroup.size"></a><a class="link" href="thread_management.html#thread.thread_management.threadgroup.size" title="Member function size()">Member function 2977 <code class="computeroutput"><span class="identifier">size</span><span class="special">()</span></code></a> 2978</h4></div></div></div> 2979<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">size</span><span class="special">();</span> 2980</pre> 2981<div class="variablelist"> 2982<p class="title"><b></b></p> 2983<dl class="variablelist"> 2984<dt><span class="term">Returns:</span></dt> 2985<dd><p> 2986 The number of threads in the group. 2987 </p></dd> 2988<dt><span class="term">Throws:</span></dt> 2989<dd><p> 2990 Nothing. 2991 </p></dd> 2992</dl> 2993</div> 2994</div> 2995</div> 2996</div> 2997<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 2998<td align="left"></td> 2999<td align="right"><div class="copyright-footer">Copyright © 2007 -11 Anthony Williams<br>Copyright © 2011 -17 Vicente J. Botet Escriba<p> 3000 Distributed under the Boost Software License, Version 1.0. (See accompanying 3001 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>) 3002 </p> 3003</div></td> 3004</tr></table> 3005<hr> 3006<div class="spirit-nav"> 3007<a accesskey="p" href="future.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../thread.html"><img src="../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="ScopedThreads.html"><img src="../../../doc/src/images/next.png" alt="Next"></a> 3008</div> 3009</body> 3010</html> 3011