~kklimonda/ubuntu/natty/glibmm2.4/update

« back to all changes in this revision

Viewing changes to docs/reference/html/thread_2thread_8cc-example.html

  • Committer: Bazaar Package Importer
  • Author(s): Robert Ancell
  • Date: 2009-08-28 08:32:22 UTC
  • mfrom: (1.2.38 upstream)
  • Revision ID: james.westby@ubuntu.com-20090828083222-qr6jekfjlsz52rb7
Tags: 2.21.4.1-0ubuntu1
* New upstream release: (LP: #419705)
  2.21.4.1
  - Reenable hierarchy graphs for each class
  - Remove header and footer HTML fragments
  - Use shared mm-common Doxygen style sheet
  2.21.4
  - Transition to new mm-common build infrastructure
  - Correct the if condition in Gio::MemoryInputStream::add_data().
* debian/control.in:
  - Remove debian VCS links as they confuse debcheckout
* debian/libglibmm-2.4-dev.install:
  - Install files from /usr/share/glibmm-2.4/doctool

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2
 
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
3
 
<title>glibmm 2.4: thread/thread.cc</title>
 
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 
2
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
 
3
<title>glibmm: thread/thread.cc</title>
 
4
<link href="tabs.css" rel="stylesheet" type="text/css">
4
5
<link href="doxygen.css" rel="stylesheet" type="text/css">
5
 
</head>
6
 
<body bgcolor="#ffffff">
7
 
<table border="0" width="100%">
8
 
<tr>
9
 
    <td width="10%" height="40"><img src="../../images/gtkmm_logo.gif" alt="logo" border="0" width="100%" height="100%"/></td>
10
 
    <td width="90%" height="40"><img src="../../images/top.gif" alt="top" width="100%" height="40"/></td>
11
 
</tr>
12
 
</table>
13
 
<center>
14
 
  <a class="qindex" href="http://www.gtkmm.org/documentation.shtml">Main Page</a> &nbsp;
15
 
  <a class="qindex" href="namespaces.html">glibmm Namespaces</a> &nbsp;
16
 
  <a href="../../../../gtkmm-2.4/docs/tutorial/html/index.html"> Book</a> &nbsp;
17
 
</center>
18
 
<hr width="100%"/>
19
 
 
20
 
<!-- begin main content -->
21
 
<div id="content">
22
 
<!-- Generated by Doxygen 1.5.9 -->
 
6
</head><body>
 
7
<!-- Generated by Doxygen 1.5.8 -->
 
8
<div class="navigation" id="top">
 
9
  <div class="tabs">
 
10
    <ul>
 
11
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
 
12
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
 
13
      <li><a href="modules.html"><span>Modules</span></a></li>
 
14
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
 
15
      <li><a href="annotated.html"><span>Classes</span></a></li>
 
16
      <li><a href="examples.html"><span>Examples</span></a></li>
 
17
    </ul>
 
18
  </div>
 
19
</div>
23
20
<div class="contents">
24
21
<h1>thread/thread.cc</h1>A glibmm thread example.<p>
25
22
<div class="fragment"><pre class="fragment">
26
 
<span class="preprocessor">#include &lt;<a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/iostream.html">iostream</a>&gt;</span>
27
 
<span class="preprocessor">#include &lt;queue&gt;</span>
28
 
<span class="preprocessor">#include &lt;<a class="code" href="random_8h.html">glibmm/random.h</a>&gt;</span>
29
 
<span class="preprocessor">#include &lt;<a class="code" href="thread_8h.html">glibmm/thread.h</a>&gt;</span>
30
 
<span class="preprocessor">#include &lt;<a class="code" href="timer_8h.html">glibmm/timer.h</a>&gt;</span>
 
23
<span class="preprocessor">#include &lt;<a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00777.html">iostream</a>&gt;</span>
 
24
<span class="preprocessor">#include &lt;<a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00839.html">queue</a>&gt;</span>
 
25
<span class="preprocessor">#include &lt;glibmm/random.h&gt;</span>
 
26
<span class="preprocessor">#include &lt;glibmm/thread.h&gt;</span>
 
27
<span class="preprocessor">#include &lt;glibmm/timer.h&gt;</span>
31
28
 
32
29
 
33
30
<span class="keyword">namespace</span>
34
31
{
35
32
 
36
 
<span class="keyword">class </span>MessageQueue : <span class="keyword">public</span> sigc::<a name="_a0"></a><a class="code" href="classsigc_1_1trackable.html">trackable</a>
 
33
<span class="keyword">class </span>MessageQueue : <span class="keyword">public</span> sigc::<a name="_a0"></a><a class="codeRef" doxygen="libsigc++-2.0.tag:http://library.gnome.org/devel/libsigc++/unstable/" href="http://library.gnome.org/devel/libsigc++/unstable/structsigc_1_1trackable.html">trackable</a>
37
34
{
38
35
<span class="keyword">public</span>:
39
36
  MessageQueue();
43
40
  <span class="keywordtype">void</span> consumer();
44
41
 
45
42
<span class="keyword">private</span>:
46
 
  <a name="_a1"></a><a class="code" href="classGlib_1_1Mutex.html" title="Represents a mutex (mutual exclusion).">Glib::Mutex</a>     mutex_;
47
 
  <a name="_a2"></a><a class="code" href="classGlib_1_1Cond.html" title="An opaque data structure to represent a condition.">Glib::Cond</a>      cond_push_;
48
 
  <a class="code" href="classGlib_1_1Cond.html" title="An opaque data structure to represent a condition.">Glib::Cond</a>      cond_pop_;
49
 
  <a name="_a3"></a><a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/classstd_1_1queue.html">std::queue&lt;int&gt;</a> queue_;
 
43
  <a name="_a1"></a><a class="code" href="classGlib_1_1Mutex.html" title="Represents a mutex (mutual exclusion).">Glib::Mutex</a> mutex_;
 
44
  <a name="_a2"></a><a class="code" href="classGlib_1_1Cond.html" title="An opaque data structure to represent a condition.">Glib::Cond</a> cond_push_;
 
45
  <a class="code" href="classGlib_1_1Cond.html" title="An opaque data structure to represent a condition.">Glib::Cond</a> cond_pop_;
 
46
  <a name="_a3"></a><a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00523.html">std::queue&lt;int&gt;</a> queue_;
50
47
};
51
48
 
52
49
 
63
60
  <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)
64
61
  {
65
62
    {
66
 
      <a name="_a5"></a><a class="code" href="classGlib_1_1Mutex_1_1Lock.html" title="Utility class for exception-safe mutex locking.">Glib::Mutex::Lock</a> lock (mutex_);
 
63
      <a name="_a5"></a><a class="code" href="classGlib_1_1Mutex_1_1Lock.html" title="Utility class for exception-safe mutex locking.">Glib::Mutex::Lock</a> <a name="a6"></a><a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01000.html#g2bdabeb51d7e55d6358ad0857843ebea">lock</a> (mutex_);
67
64
 
68
65
      <span class="keywordflow">while</span>(queue_.size() &gt;= 64)
69
66
        cond_pop_.wait(mutex_);
70
67
 
71
68
      queue_.push(i);
72
 
      <a name="a6"></a><a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a81">std::cout</a> &lt;&lt; <span class="charliteral">'*'</span>;
73
 
      <a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a81">std::cout</a>.flush();
 
69
      <a name="a7"></a><a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#af93fdf0812752e0e02c501dea1b38f0">std::cout</a> &lt;&lt; <span class="charliteral">'*'</span>;
 
70
      <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#af93fdf0812752e0e02c501dea1b38f0">std::cout</a>.flush();
74
71
 
75
72
      cond_push_.signal();
76
73
    }
77
74
 
78
 
    <span class="keywordflow">if</span>(rand.<a name="a7"></a><a class="code" href="classGlib_1_1Rand.html#4d90f1e3ef59d0b071efa0445b6fb469">get_bool</a>())
 
75
    <span class="keywordflow">if</span>(rand.<a name="a8"></a><a class="code" href="classGlib_1_1Rand.html#4d90f1e3ef59d0b071efa0445b6fb469">get_bool</a>())
79
76
      <span class="keywordflow">continue</span>;
80
77
 
81
 
    <a name="a8"></a><a class="code" href="namespaceGlib.html#5d75264c8b47f13fb33f973b0d4fc73e">Glib::usleep</a>(rand.<a name="a9"></a><a class="code" href="classGlib_1_1Rand.html#182b9a36db153d316baf5efb1ece9fd7">get_int_range</a>(0, 100000));
 
78
    <a name="a9"></a><a class="code" href="namespaceGlib.html#5d75264c8b47f13fb33f973b0d4fc73e">Glib::usleep</a>(rand.<a name="a10"></a><a class="code" href="classGlib_1_1Rand.html#182b9a36db153d316baf5efb1ece9fd7">get_int_range</a>(0, 100000));
82
79
  }
83
80
}
84
81
 
89
86
  <span class="keywordflow">for</span>(;;)
90
87
  {
91
88
    {
92
 
      <a class="code" href="classGlib_1_1Mutex_1_1Lock.html" title="Utility class for exception-safe mutex locking.">Glib::Mutex::Lock</a> lock (mutex_);
 
89
      <a class="code" href="classGlib_1_1Mutex_1_1Lock.html" title="Utility class for exception-safe mutex locking.">Glib::Mutex::Lock</a> <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01000.html#g2bdabeb51d7e55d6358ad0857843ebea">lock</a> (mutex_);
93
90
 
94
91
      <span class="keywordflow">while</span>(queue_.empty())
95
92
        cond_push_.wait(mutex_);
96
93
 
97
94
      <span class="keyword">const</span> <span class="keywordtype">int</span> i = queue_.front();
98
95
      queue_.pop();
99
 
      <a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a81">std::cout</a> &lt;&lt; <span class="stringliteral">"\x08 \x08"</span>;
100
 
      <a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a81">std::cout</a>.flush();
 
96
      <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#af93fdf0812752e0e02c501dea1b38f0">std::cout</a> &lt;&lt; <span class="stringliteral">"\x08 \x08"</span>;
 
97
      <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#af93fdf0812752e0e02c501dea1b38f0">std::cout</a>.flush();
101
98
 
102
99
      cond_pop_.signal();
103
100
 
117
114
 
118
115
<span class="keywordtype">int</span> main(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>**)
119
116
{
120
 
  <a name="a10"></a><a class="code" href="group__Threads.html#gb26d01c776801f1fff00753e97af4fc7" title="Initializes the GLib thread system.">Glib::thread_init</a>();
 
117
  <a name="a11"></a><a class="code" href="group__Threads.html#gb26d01c776801f1fff00753e97af4fc7" title="Initializes the GLib thread system.">Glib::thread_init</a>();
121
118
 
122
119
  MessageQueue queue;
123
120
 
124
 
  <a name="_a11"></a><a class="code" href="classGlib_1_1Thread.html" title="Represents a running thread.">Glib::Thread</a> *<span class="keyword">const</span> producer = <a name="a12"></a><a class="code" href="classGlib_1_1Thread.html#b165854ff2fc9b454ee4d97050485782" title="Creates a new thread with the priority THREAD_PRIORITY_NORMAL.">Glib::Thread::create</a>(
125
 
      <a name="a13"></a><a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/group__s20__3__8__memadaptors.html#ga2">sigc::mem_fun</a>(queue, &amp;MessageQueue::producer), <span class="keyword">true</span>);
 
121
  <a name="_a12"></a><a class="code" href="classGlib_1_1Thread.html" title="Represents a running thread.">Glib::Thread</a> *<span class="keyword">const</span> producer = <a name="a13"></a><a class="code" href="classGlib_1_1Thread.html#b165854ff2fc9b454ee4d97050485782" title="Creates a new thread with the priority THREAD_PRIORITY_NORMAL.">Glib::Thread::create</a>(
 
122
      <a name="a14"></a><a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01024.html#g46b3aee55bddccc454ea4f8edc26ffa7">sigc::mem_fun</a>(queue, &amp;MessageQueue::producer), <span class="keyword">true</span>);
126
123
 
127
124
  <a class="code" href="classGlib_1_1Thread.html" title="Represents a running thread.">Glib::Thread</a> *<span class="keyword">const</span> consumer = <a class="code" href="classGlib_1_1Thread.html#b165854ff2fc9b454ee4d97050485782" title="Creates a new thread with the priority THREAD_PRIORITY_NORMAL.">Glib::Thread::create</a>(
128
 
      <a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/group__s20__3__8__memadaptors.html#ga2">sigc::mem_fun</a>(queue, &amp;MessageQueue::consumer), <span class="keyword">true</span>);
 
125
      <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01024.html#g46b3aee55bddccc454ea4f8edc26ffa7">sigc::mem_fun</a>(queue, &amp;MessageQueue::consumer), <span class="keyword">true</span>);
129
126
 
130
 
  producer-&gt;<a name="a14"></a><a class="code" href="classGlib_1_1Thread.html#b95e51699279fd84c9577c45d76b0d8e" title="Waits until the thread finishes.">join</a>();
 
127
  producer-&gt;<a name="a15"></a><a class="code" href="classGlib_1_1Thread.html#b95e51699279fd84c9577c45d76b0d8e" title="Waits until the thread finishes.">join</a>();
131
128
  consumer-&gt;<a class="code" href="classGlib_1_1Thread.html#b95e51699279fd84c9577c45d76b0d8e" title="Waits until the thread finishes.">join</a>();
132
129
 
133
 
  <a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a81">std::cout</a> &lt;&lt; <a name="a15"></a><a class="codeRef" doxygen="libstdc++.tag.xml:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/namespacestd.html#a688">std::endl</a>;
 
130
  <a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#af93fdf0812752e0e02c501dea1b38f0">std::cout</a> &lt;&lt; <a name="a16"></a><a class="codeRef" doxygen="libstdc++.tag:http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00969.html#9e2ba1ed9813a1f03adc9a87dbf491a5">std::endl</a>;
134
131
 
135
132
  <span class="keywordflow">return</span> 0;
136
133
}
137
134
 
138
135
</pre></div> </div>
139
 
</div> <!-- end main content -->
140
 
 
141
 
<hr><address><small>
142
 
Generated for glibmm 2.4 by <a href="http://www.doxygen.org/index.html">
143
 
Doxygen</a> 1.5.9 &copy;&nbsp;1997-2001</small></address>
 
136
<hr size="1"><address style="text-align: right;"><small>Generated on Fri Aug 28 16:44:56 2009 for glibmm by&#160;
 
137
<a href="http://www.doxygen.org/index.html">
 
138
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
144
139
</body>
145
140
</html>