Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_33_1/libs/thread/doc/thread-ref.xml @ 12

Last change on this file since 12 was 12, checked in by landauf, 17 years ago

added boost

File size: 9.3 KB
Line 
1<?xml version="1.0" encoding="utf-8"?>
2<!DOCTYPE library PUBLIC "-//Boost//DTD BoostBook XML V1.0//EN"
3  "http://www.boost.org/tools/boostbook/dtd/boostbook.dtd" [
4  <!ENTITY % threads.entities SYSTEM "entities.xml">
5  %threads.entities;
6]>
7<header name="boost/thread/thread.hpp"
8  last-revision="$Date: 2005/12/04 18:11:08 $">
9  <namespace name="boost">
10    <class name="thread">
11                <purpose>
12                        <para>The <classname>thread</classname> class represents threads of
13                        execution, and provides the functionality to create and manage
14                        threads within the &Boost.Threads; library. See
15                        <xref linkend="threads.glossary"/> for a precise description of
16                        <link linkend="threads.glossary.thread">thread of execution</link>,
17                        and for definitions of threading-related terms and of thread states such as
18                        <link linkend="threads.glossary.thread-state">blocked</link>.</para>
19                </purpose>
20
21                <description>
22                        <para>A <link linkend="threads.glossary.thread">thread of execution</link>
23                        has an initial function. For the program's initial thread, the initial
24                        function is <code>main()</code>. For other threads, the initial
25                        function is <code>operator()</code> of the function object passed to
26                        the <classname>thread</classname> object's constructor.</para>
27
28                        <para>A thread of execution  is said to be &quot;finished&quot; 
29                        or to have &quot;finished execution&quot; when its initial function returns or
30                        is terminated. This includes completion of all thread cleanup
31                        handlers, and completion of the normal C++ function return behaviors,
32                        such as destruction of automatic storage (stack) objects and releasing
33                        any associated implementation resources.</para>
34
35                        <para>A thread object has an associated state which is either
36                        &quot;joinable&quot; or &quot;non-joinable&quot;.</para>
37
38                        <para>Except as described below, the policy used by an implementation
39                        of &Boost.Threads; to schedule transitions between thread states is
40                        unspecified.</para>
41
42                        <para><note>Just as the lifetime of a file may be different from the
43                        lifetime of an <code>iostream</code> object which represents the file, the lifetime
44                        of a thread of execution may be different from the
45                        <classname>thread</classname> object which represents the thread of
46                        execution. In particular, after a call to <code>join()</code>,
47                        the thread of execution will no longer exist even though the
48                        <classname>thread</classname> object continues to exist until the
49                        end of its normal lifetime. The converse is also possible; if
50                        a <classname>thread</classname> object is destroyed without
51                        <code>join()</code> first having been called, the thread of execution
52                        continues until its initial function completes.</note></para>
53                </description>
54
55                <inherit access="private">
56                        <type><classname>boost::noncopyable</classname></type>
57                        <purpose>Exposition only</purpose>
58                </inherit>
59
60                <constructor>
61                        <effects>Constructs a <classname>thread</classname> object
62                        representing the current thread of execution.</effects>
63                       
64                        <postconditions><code>*this</code> is non-joinable.</postconditions>
65                       
66                        <notes><emphasis role="bold">Danger:</emphasis>
67                        <code>*this</code> is valid only within the current thread.</notes>
68                </constructor>
69
70                <constructor specifiers="explicit">
71                        <parameter name="threadfunc">
72                                <paramtype>const boost::function0&lt;void&gt;&amp;</paramtype>
73                        </parameter>
74                       
75                        <effects>
76                                Starts a new thread of execution and constructs a
77                                <classname>thread</classname> object representing it.
78                                Copies <code>threadfunc</code> (which in turn copies
79                                the function object wrapped by <code>threadfunc</code>)
80                                to an internal location which persists for the lifetime
81                                of the new thread of execution. Calls <code>operator()</code>
82                                on the copy of the <code>threadfunc</code> function object
83                                in the new thread of execution.
84                        </effects>
85                       
86                        <postconditions><code>*this</code> is joinable.</postconditions>
87
88                        <throws><code>boost::thread_resource_error</code> if a new thread
89                        of execution cannot be started.</throws>
90                </constructor>
91               
92                <destructor>
93                        <effects>Destroys <code>*this</code>. The actual thread of
94                        execution may continue to execute after the
95                        <classname>thread</classname> object has been destroyed.
96                        </effects>
97                       
98                        <notes>If <code>*this</code> is joinable the actual thread
99                        of execution becomes &quot;detached&quot;. Any resources used
100                        by the thread will be reclaimed when the thread of execution
101                        completes. To ensure such a thread of execution runs to completion
102                        before the <classname>thread</classname> object is destroyed, call
103                        <code>join()</code>.</notes>
104                </destructor>
105               
106                <method-group name="comparison">
107                        <method name="operator==" cv="const">
108                                <type>bool</type>
109                               
110                                <parameter name="rhs">
111                                        <type>const thread&amp;</type>
112                                </parameter>
113                               
114                                <requires>The thread is non-terminated or <code>*this</code>
115                                is joinable.</requires>
116                                 
117                                <returns><code>true</code> if <code>*this</code> and
118                                <code>rhs</code> represent the same thread of
119                                execution.</returns>
120                        </method>
121                       
122                        <method name="operator!=" cv="const">
123                                <type>bool</type>
124                               
125                                <parameter name="rhs">
126                                        <type>const thread&amp;</type>
127                                </parameter>
128                               
129                                <requires>The thread is non-terminated or <code>*this</code>
130                                is joinable.</requires>
131                                 
132                                <returns><code>!(*this==rhs)</code>.</returns>
133                        </method>
134                </method-group>
135
136                <method-group name="modifier">
137                        <method name="join">
138                                <type>void</type>
139                               
140                                <requires><code>*this</code> is joinable.</requires>
141                                 
142                                <effects>The current thread of execution blocks until the
143                                initial function of the thread of execution represented by
144                                <code>*this</code> finishes and all resources are
145                                reclaimed.</effects>
146                               
147                                <postcondition><code>*this</code> is non-joinable.</postcondition>
148                               
149                                <notes>If <code>*this == thread()</code> the result is
150                                implementation-defined. If the implementation doesn't
151                                detect this the result will be
152                                <link linkend="threads.glossary.deadlock">deadlock</link>.
153                                </notes>
154                        </method>
155                </method-group>
156
157                <method-group name="static">
158                        <method name="sleep" specifiers="static">
159                                <type>void</type>
160                               
161                                <parameter name="xt">
162                                        <paramtype>const <classname>xtime</classname>&amp;</paramtype>
163                                </parameter>
164                               
165                                <effects>The current thread of execution blocks until
166                                <code>xt</code> is reached.</effects>
167                        </method>
168                       
169                        <method name="yield" specifiers="static">
170                                <type>void</type>
171
172                                <effects>The current thread of execution is placed in the
173                                <link linkend="threads.glossary.thread-state">ready</link> 
174                                state.</effects>
175                               
176                                <notes>
177                                        <simpara>Allow the current thread to give up the rest of its
178                                        time slice (or other scheduling quota) to another thread.
179                                        Particularly useful in non-preemptive implementations.</simpara>
180                                </notes>
181                        </method>
182                </method-group>
183        </class>
184
185        <class name="thread_group">
186                <purpose>
187                        The <classname>thread_group</classname> class provides a container
188                        for easy grouping of threads to simplify several common thread
189                        creation and management idioms.
190                </purpose>
191
192                <inherit access="private">
193                        <type><classname>boost::noncopyable</classname></type>
194                        <purpose>Exposition only</purpose>
195                </inherit>
196
197
198                <constructor>
199                        <effects>Constructs an empty <classname>thread_group</classname>
200                        container.</effects>
201                </constructor>
202               
203                <destructor>
204                        <effects>Destroys each contained thread object. Destroys <code>*this</code>.</effects>
205                       
206                        <notes>Behavior is undefined if another thread references
207                        <code>*this </code> during the execution of the destructor.
208                        </notes>
209                </destructor>
210
211                <method-group name="modifier">
212                        <method name="create_thread">
213                                <type><classname>thread</classname>*</type>
214                               
215                                <parameter name="threadfunc">
216                                        <paramtype>const boost::function0&lt;void&gt;&amp;</paramtype>
217                                </parameter>
218                               
219                                <effects>Creates a new <classname>thread</classname> object
220                                that executes <code>threadfunc</code> and adds it to the
221                                <code>thread_group</code> container object's list of managed
222                                <classname>thread</classname> objects.</effects>
223                               
224                                <returns>Pointer to the newly created
225                                <classname>thread</classname> object.</returns>
226                        </method>
227
228                        <method name="add_thread">
229                                <type>void</type>
230                               
231                                <parameter name="thrd">
232                                        <paramtype><classname>thread</classname>*</paramtype>
233                                </parameter>
234                               
235                                <effects>Adds <code>thrd</code> to the
236                                <classname>thread_group</classname> object's list of managed
237                                <classname>thread</classname> objects. The <code>thrd</code> 
238                                object must have been allocated via <code>operator new</code> and will
239                                be deleted when the group is destroyed.</effects>
240                        </method>
241
242                        <method name="remove_thread">
243                                <type>void</type>
244                               
245                                <parameter name="thrd">
246                                        <paramtype><classname>thread</classname>*</paramtype>
247                                </parameter>
248                               
249                                <effects>Removes <code>thread</code> from <code>*this</code>'s
250                                list of managed <classname>thread</classname> objects.</effects>
251                               
252                                <throws><emphasis role="bold">???</emphasis> if
253                                <code>thrd</code> is not in <code>*this</code>'s list
254                                of managed <classname>thread</classname> objects.</throws>
255                        </method>
256
257                        <method name="join_all">
258                                <type>void</type>
259                               
260                                <effects>Calls <code>join()</code> on each of the managed
261                                <classname>thread</classname> objects.</effects>
262                        </method>
263                </method-group>
264        </class>
265  </namespace>
266</header>
Note: See TracBrowser for help on using the repository browser.