3 <meta http-equiv=
"Content-Type" content=
"text/html; charset=US-ASCII">
4 <title>Namespace this_fiber
</title>
5 <link rel=
"stylesheet" href=
"../../../../../../doc/src/boostbook.css" type=
"text/css">
6 <meta name=
"generator" content=
"DocBook XSL Stylesheets V1.75.2">
7 <link rel=
"home" href=
"../../index.html" title=
"Chapter 1. Fiber">
8 <link rel=
"up" href=
"../fiber_mgmt.html" title=
"Fiber management">
9 <link rel=
"prev" href=
"id.html" title=
"Class fiber::id">
10 <link rel=
"next" href=
"../scheduling.html" title=
"Scheduling">
12 <body bgcolor=
"white" text=
"black" link=
"#0000FF" vlink=
"#840084" alink=
"#0000FF">
13 <table cellpadding=
"2" width=
"100%"><tr>
14 <td valign=
"top"><img alt=
"Boost C++ Libraries" width=
"277" height=
"86" src=
"../../../../../../boost.png"></td>
15 <td align=
"center"><a href=
"../../../../../../index.html">Home
</a></td>
16 <td align=
"center"><a href=
"../../../../../../libs/libraries.htm">Libraries
</a></td>
17 <td align=
"center"><a href=
"http://www.boost.org/users/people.html">People
</a></td>
18 <td align=
"center"><a href=
"http://www.boost.org/users/faq.html">FAQ
</a></td>
19 <td align=
"center"><a href=
"../../../../../../more/index.htm">More
</a></td>
22 <div class=
"spirit-nav">
23 <a accesskey=
"p" href=
"id.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../fiber_mgmt.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=
"../scheduling.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>
26 <div class=
"titlepage"><div><div><h3 class=
"title">
27 <a name=
"fiber.fiber_mgmt.this_fiber"></a><a class=
"link" href=
"this_fiber.html" title=
"Namespace this_fiber">Namespace this_fiber
</a>
28 </h3></div></div></div>
30 In general,
<code class=
"computeroutput"><span class=
"identifier">this_fiber
</span></code> operations
31 may be called from the
<span class=
"quote">“<span class=
"quote">main
</span>”</span> fiber
— the fiber on which function
32 <code class=
"computeroutput"><span class=
"identifier">main
</span><span class=
"special">()
</span></code>
33 is entered
— as well as from an explicitly-launched thread
’s thread-function.
34 That is, in many respects the main fiber on each thread can be treated like
35 an explicitly-launched fiber.
37 <pre class=
"programlisting"><span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
38 <span class=
"keyword">namespace
</span> <span class=
"identifier">this_fiber
</span> <span class=
"special">{
</span>
40 <span class=
"identifier">fibers
</span><span class=
"special">::
</span><span class=
"identifier">fiber
</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>
41 <span class=
"keyword">void
</span> <span class=
"identifier">yield
</span><span class=
"special">()
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
42 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Clock
</span><span class=
"special">,
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Duration
</span> <span class=
"special">></span>
43 <span class=
"keyword">void
</span> <span class=
"identifier">sleep_until
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</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=
"keyword">const
</span><span class=
"special">&);
</span>
44 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Rep
</span><span class=
"special">,
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Period
</span> <span class=
"special">></span>
45 <span class=
"keyword">void
</span> <span class=
"identifier">sleep_for
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</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=
"keyword">const
</span><span class=
"special">&);
</span>
46 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">PROPS
</span> <span class=
"special">></span>
47 <span class=
"identifier">PROPS
</span> <span class=
"special">&</span> <span class=
"identifier">properties
</span><span class=
"special">();
</span>
49 <span class=
"special">}}
</span>
54 <a name=
"this_fiber_get_id_bridgehead"></a>
55 <span><a name=
"this_fiber_get_id"></a></span>
56 <a class=
"link" href=
"this_fiber.html#this_fiber_get_id">Non-member
57 function
<code class=
"computeroutput">this_fiber::get_id()
</code></a>
61 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">operations
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
63 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
64 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
66 <span class=
"identifier">fiber
</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>
68 <span class=
"special">}}
</span>
70 <div class=
"variablelist">
71 <p class=
"title"><b></b></p>
73 <dt><span class=
"term">Returns:
</span></dt>
75 An instance of
<a class=
"link" href=
"../fiber_mgmt.html#class_fiber_id"><code class=
"computeroutput"><span class=
"identifier">fiber
</span><span class=
"special">::
</span><span class=
"identifier">id
</span></code></a> that
76 represents the currently executing fiber.
78 <dt><span class=
"term">Throws:
</span></dt>
87 <a name=
"this_fiber_sleep_until_bridgehead"></a>
88 <span><a name=
"this_fiber_sleep_until"></a></span>
89 <a class=
"link" href=
"this_fiber.html#this_fiber_sleep_until">Non-member
90 function
<code class=
"computeroutput">this_fiber::sleep_until()
</code></a>
94 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">operations
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
96 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
97 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
99 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Clock
</span><span class=
"special">,
</span> <span class=
"keyword">typename
</span> <span class=
"identifier">Duration
</span> <span class=
"special">></span>
100 <span class=
"keyword">void
</span> <span class=
"identifier">sleep_until
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</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=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">abs_time
</span><span class=
"special">);
</span>
102 <span class=
"special">}}
</span>
104 <div class=
"variablelist">
105 <p class=
"title"><b></b></p>
107 <dt><span class=
"term">Effects:
</span></dt>
109 Suspends the current fiber until the time point specified by
<code class=
"computeroutput"><span class=
"identifier">abs_time
</span></code> has been reached.
111 <dt><span class=
"term">Throws:
</span></dt>
113 timeout-related exceptions.
115 <dt><span class=
"term">Note:
</span></dt>
117 The current fiber will not resume before
<code class=
"computeroutput"><span class=
"identifier">abs_time
</span></code>,
118 but there are no guarantees about how soon after
<code class=
"computeroutput"><span class=
"identifier">abs_time
</span></code>
121 <dt><span class=
"term">Note:
</span></dt>
123 <span class=
"quote">“<span class=
"quote">timeout-related exceptions
</span>”</span> are as defined in the C++
124 Standard, section
<span class=
"bold"><strong>30.2.4 Timing specifications
125 [thread.req.timing]
</strong></span>:
<span class=
"quote">“<span class=
"quote">A function that takes an argument
126 which specifies a timeout will throw if, during its execution, a clock,
127 time point, or time duration throws an exception. Such exceptions are
128 referred to as
<span class=
"emphasis"><em>timeout-related exceptions.
</em></span></span>”</span>
135 <a name=
"this_fiber_sleep_for_bridgehead"></a>
136 <span><a name=
"this_fiber_sleep_for"></a></span>
137 <a class=
"link" href=
"this_fiber.html#this_fiber_sleep_for">Non-member
138 function
<code class=
"computeroutput">this_fiber::sleep_for()
</code></a>
142 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">operations
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
144 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
145 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
147 <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>
148 <span class=
"keyword">void
</span> <span class=
"identifier">sleep_for
</span><span class=
"special">(
</span> <span class=
"identifier">std
</span><span class=
"special">::
</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=
"keyword">const
</span><span class=
"special">&</span> <span class=
"identifier">rel_time
</span><span class=
"special">);
</span>
150 <span class=
"special">}}
</span>
152 <div class=
"variablelist">
153 <p class=
"title"><b></b></p>
155 <dt><span class=
"term">Effects:
</span></dt>
157 Suspends the current fiber until the time duration specified by
<code class=
"computeroutput"><span class=
"identifier">rel_time
</span></code> has elapsed.
159 <dt><span class=
"term">Throws:
</span></dt>
161 timeout-related exceptions.
163 <dt><span class=
"term">Note:
</span></dt>
165 The current fiber will not resume before
<code class=
"computeroutput"><span class=
"identifier">rel_time
</span></code>
166 has elapsed, but there are no guarantees about how soon after that
174 <a name=
"this_fiber_yield_bridgehead"></a>
175 <span><a name=
"this_fiber_yield"></a></span>
176 <a class=
"link" href=
"this_fiber.html#this_fiber_yield">Non-member function
177 <code class=
"computeroutput">this_fiber::yield()
</code></a>
181 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">operations
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
183 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
184 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
186 <span class=
"keyword">void
</span> <span class=
"identifier">yield
</span><span class=
"special">()
</span> <span class=
"keyword">noexcept
</span><span class=
"special">;
</span>
188 <span class=
"special">}}
</span>
190 <div class=
"variablelist">
191 <p class=
"title"><b></b></p>
193 <dt><span class=
"term">Effects:
</span></dt>
195 Reliquishes execution control, allowing other fibers to run.
197 <dt><span class=
"term">Throws:
</span></dt>
201 <dt><span class=
"term">Note:
</span></dt>
203 A fiber that calls
<code class=
"computeroutput"><span class=
"identifier">yield
</span><span class=
"special">()
</span></code> is not suspended: it is immediately
204 passed to the scheduler as ready to run.
211 <a name=
"this_fiber_properties_bridgehead"></a>
212 <span><a name=
"this_fiber_properties"></a></span>
213 <a class=
"link" href=
"this_fiber.html#this_fiber_properties">Non-member
214 function
<code class=
"computeroutput">this_fiber::properties()
</code></a>
218 <pre class=
"programlisting"><span class=
"preprocessor">#include
</span> <span class=
"special"><</span><span class=
"identifier">boost
</span><span class=
"special">/
</span><span class=
"identifier">fiber
</span><span class=
"special">/
</span><span class=
"identifier">operations
</span><span class=
"special">.
</span><span class=
"identifier">hpp
</span><span class=
"special">></span>
220 <span class=
"keyword">namespace
</span> <span class=
"identifier">boost
</span> <span class=
"special">{
</span>
221 <span class=
"keyword">namespace
</span> <span class=
"identifier">fibers
</span> <span class=
"special">{
</span>
223 <span class=
"keyword">template
</span><span class=
"special"><</span> <span class=
"keyword">typename
</span> <span class=
"identifier">PROPS
</span> <span class=
"special">></span>
224 <span class=
"identifier">PROPS
</span> <span class=
"special">&</span> <span class=
"identifier">properties
</span><span class=
"special">();
</span>
226 <span class=
"special">}}
</span>
228 <div class=
"variablelist">
229 <p class=
"title"><b></b></p>
231 <dt><span class=
"term">Preconditions:
</span></dt>
233 <a class=
"link" href=
"fiber.html#use_scheduling_algorithm"><code class=
"computeroutput">use_scheduling_algorithm()
</code></a> has been called from
234 this thread with a subclass of
<a class=
"link" href=
"../scheduling.html#class_algorithm_with_properties"><code class=
"computeroutput">algorithm_with_properties
<></code></a> with
235 the same template argument
<code class=
"computeroutput"><span class=
"identifier">PROPS
</span></code>.
237 <dt><span class=
"term">Returns:
</span></dt>
239 a reference to the scheduler properties instance for the currently
242 <dt><span class=
"term">Throws:
</span></dt>
244 <code class=
"computeroutput"><span class=
"identifier">std
</span><span class=
"special">::
</span><span class=
"identifier">bad_cast
</span></code> if
<code class=
"computeroutput"><span class=
"identifier">use_scheduling_algorithm
</span><span class=
"special">()
</span></code> was called with an
<code class=
"computeroutput"><span class=
"identifier">algorithm_with_properties
</span></code> subclass
245 with some other template parameter than
<code class=
"computeroutput"><span class=
"identifier">PROPS
</span></code>.
247 <dt><span class=
"term">Note:
</span></dt>
249 <a class=
"link" href=
"../scheduling.html#class_algorithm_with_properties"><code class=
"computeroutput">algorithm_with_properties
<></code></a> provides
250 a way for a user-coded scheduler to associate extended properties,
251 such as priority, with a fiber instance. This function allows access
252 to those user-provided properties.
254 <dt><span class=
"term">Note:
</span></dt>
256 The first time this function is called from the main fiber of a thread,
257 it may internally yield, permitting other fibers to run.
259 <dt><span class=
"term">See also:
</span></dt>
261 <a class=
"link" href=
"../custom.html#custom">Customization
</a>
266 <table xmlns:
rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%"><tr>
267 <td align=
"left"></td>
268 <td align=
"right"><div class=
"copyright-footer">Copyright
© 2013 Oliver Kowalke
<p>
269 Distributed under the Boost Software License, Version
1.0. (See accompanying
270 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>)
275 <div class=
"spirit-nav">
276 <a accesskey=
"p" href=
"id.html"><img src=
"../../../../../../doc/src/images/prev.png" alt=
"Prev"></a><a accesskey=
"u" href=
"../fiber_mgmt.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=
"../scheduling.html"><img src=
"../../../../../../doc/src/images/next.png" alt=
"Next"></a>