Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 7aa0b3689999b2d0524276a8f3c2a10a > files > 1203

glibmm2.4-doc-2.42.0-3.mga5.noarch.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.7"/>
<title>glibmm: thread/thread.cc</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">glibmm
   &#160;<span id="projectnumber">2.42.0</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.7 -->
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="examples.html"><span>Examples</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div class="header">
  <div class="headertitle">
<div class="title">thread/thread.cc</div>  </div>
</div><!--header-->
<div class="contents">
<p>A glibmm thread example.</p>
<div class="fragment"><div class="line"></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01265.html">iostream</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;<a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01396.html">queue</a>&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;glibmm/threads.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;glibmm/random.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;glibmm/timer.h&gt;</span></div>
<div class="line"><span class="preprocessor">#include &lt;glibmm/init.h&gt;</span></div>
<div class="line"></div>
<div class="line"><span class="keyword">namespace</span></div>
<div class="line">{</div>
<div class="line"></div>
<div class="line"><span class="keyword">class </span>MessageQueue</div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line">  MessageQueue();</div>
<div class="line">  ~MessageQueue();</div>
<div class="line"></div>
<div class="line">  <span class="keywordtype">void</span> producer();</div>
<div class="line">  <span class="keywordtype">void</span> consumer();</div>
<div class="line"></div>
<div class="line"><span class="keyword">private</span>:</div>
<div class="line">  <a name="_a0"></a><a class="code" href="classGlib_1_1Threads_1_1Mutex.html">Glib::Threads::Mutex</a> mutex_;</div>
<div class="line">  <a name="_a1"></a><a class="code" href="classGlib_1_1Threads_1_1Cond.html">Glib::Threads::Cond</a> cond_push_;</div>
<div class="line">  <a class="code" href="classGlib_1_1Threads_1_1Cond.html">Glib::Threads::Cond</a> cond_pop_;</div>
<div class="line">  <a name="_a2"></a><a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a00897.html">std::queue&lt;int&gt;</a> queue_;</div>
<div class="line">};</div>
<div class="line"></div>
<div class="line"></div>
<div class="line">MessageQueue::MessageQueue()</div>
<div class="line">{}</div>
<div class="line"></div>
<div class="line">MessageQueue::~MessageQueue()</div>
<div class="line">{}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> MessageQueue::producer()</div>
<div class="line">{</div>
<div class="line">  <a name="_a3"></a><a class="code" href="classGlib_1_1Rand.html">Glib::Rand</a> rand (1234);</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">for</span>(<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)</div>
<div class="line">  {</div>
<div class="line">    {</div>
<div class="line">      <a name="_a4"></a><a class="code" href="classGlib_1_1Threads_1_1Mutex_1_1Lock.html">Glib::Threads::Mutex::Lock</a> <a name="a5"></a><a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01650.html#ga24630a7020b341d48604f46e9eb210cd">lock</a> (mutex_);</div>
<div class="line"></div>
<div class="line">      <span class="keywordflow">while</span>(queue_.size() &gt;= 64)</div>
<div class="line">        cond_pop_.wait(mutex_);</div>
<div class="line"></div>
<div class="line">      queue_.push(i);</div>
<div class="line">      <a name="a6"></a>std::cout &lt;&lt; <span class="charliteral">&#39;*&#39;</span>;</div>
<div class="line">      std::cout.flush();</div>
<div class="line"></div>
<div class="line">      cond_push_.signal();</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="keywordflow">if</span>(rand.<a name="a7"></a><a class="code" href="classGlib_1_1Rand.html#a4d90f1e3ef59d0b071efa0445b6fb469">get_bool</a>())</div>
<div class="line">      <span class="keywordflow">continue</span>;</div>
<div class="line"></div>
<div class="line">    <a name="a8"></a><a class="code" href="namespaceGlib.html#a5d75264c8b47f13fb33f973b0d4fc73e">Glib::usleep</a>(rand.<a name="a9"></a><a class="code" href="classGlib_1_1Rand.html#a182b9a36db153d316baf5efb1ece9fd7">get_int_range</a>(0, 100000));</div>
<div class="line">  }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"><span class="keywordtype">void</span> MessageQueue::consumer()</div>
<div class="line">{</div>
<div class="line">  <a class="code" href="classGlib_1_1Rand.html">Glib::Rand</a> rand (4567);</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">for</span>(;;)</div>
<div class="line">  {</div>
<div class="line">    {</div>
<div class="line">      <a class="code" href="classGlib_1_1Threads_1_1Mutex_1_1Lock.html">Glib::Threads::Mutex::Lock</a> <a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01650.html#ga24630a7020b341d48604f46e9eb210cd">lock</a> (mutex_);</div>
<div class="line"></div>
<div class="line">      <span class="keywordflow">while</span>(queue_.empty())</div>
<div class="line">        cond_push_.wait(mutex_);</div>
<div class="line"></div>
<div class="line">      <span class="keyword">const</span> <span class="keywordtype">int</span> i = queue_.front();</div>
<div class="line">      queue_.pop();</div>
<div class="line">      std::cout &lt;&lt; <span class="stringliteral">&quot;\x08 \x08&quot;</span>;</div>
<div class="line">      std::cout.flush();</div>
<div class="line"></div>
<div class="line">      cond_pop_.signal();</div>
<div class="line"></div>
<div class="line">      <span class="keywordflow">if</span>(i &gt;= 199)</div>
<div class="line">        <span class="keywordflow">break</span>;</div>
<div class="line">    }</div>
<div class="line"></div>
<div class="line">    <span class="keywordflow">if</span>(rand.<a class="code" href="classGlib_1_1Rand.html#a4d90f1e3ef59d0b071efa0445b6fb469">get_bool</a>())</div>
<div class="line">      <span class="keywordflow">continue</span>;</div>
<div class="line"></div>
<div class="line">    <a class="code" href="namespaceGlib.html#a5d75264c8b47f13fb33f973b0d4fc73e">Glib::usleep</a>(rand.<a class="code" href="classGlib_1_1Rand.html#a182b9a36db153d316baf5efb1ece9fd7">get_int_range</a>(10000, 200000));</div>
<div class="line">  }</div>
<div class="line">}</div>
<div class="line"></div>
<div class="line">}</div>
<div class="line"></div>
<div class="line"></div>
<div class="line"><span class="keywordtype">int</span> main(<span class="keywordtype">int</span>, <span class="keywordtype">char</span>**)</div>
<div class="line">{</div>
<div class="line">  <a name="a10"></a><a class="code" href="namespaceGlib.html#ac90aee10d0b90e3d8a96a86b5394f87b">Glib::init</a>();</div>
<div class="line"></div>
<div class="line">  MessageQueue queue;</div>
<div class="line"></div>
<div class="line">  <a name="_a11"></a><a class="code" href="classGlib_1_1Threads_1_1Thread.html">Glib::Threads::Thread</a> *<span class="keyword">const</span> producer = <a name="a12"></a><a class="code" href="classGlib_1_1Threads_1_1Thread.html#ad89d142f0a9fd02d476dbed49dd17b85">Glib::Threads::Thread::create</a>(</div>
<div class="line">      <a name="a13"></a><a class="codeRef" href="http://library.gnome.org/devel/libsigc++/unstable/group__mem__fun.html#gadf6b6d22c503b439019f0a2e77352419">sigc::mem_fun</a>(queue, &amp;MessageQueue::producer));</div>
<div class="line"></div>
<div class="line">  <a class="code" href="classGlib_1_1Threads_1_1Thread.html">Glib::Threads::Thread</a> *<span class="keyword">const</span> consumer = <a class="code" href="classGlib_1_1Threads_1_1Thread.html#ad89d142f0a9fd02d476dbed49dd17b85">Glib::Threads::Thread::create</a>(</div>
<div class="line">      <a class="codeRef" href="http://library.gnome.org/devel/libsigc++/unstable/group__mem__fun.html#gadf6b6d22c503b439019f0a2e77352419">sigc::mem_fun</a>(queue, &amp;MessageQueue::consumer));</div>
<div class="line"></div>
<div class="line">  producer-&gt;<a name="a14"></a><a class="code" href="classGlib_1_1Threads_1_1Thread.html#ad68ccd7d8209913f09f742aef95758e1">join</a>();</div>
<div class="line">  consumer-&gt;<a class="code" href="classGlib_1_1Threads_1_1Thread.html#ad68ccd7d8209913f09f742aef95758e1">join</a>();</div>
<div class="line"></div>
<div class="line">  std::cout &lt;&lt; <a name="a15"></a><a class="codeRef" href="http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/a01616.html#a8b3758bb8f17c440c7963363f42f69f3">std::endl</a>;</div>
<div class="line"></div>
<div class="line">  <span class="keywordflow">return</span> 0;</div>
<div class="line">}</div>
<div class="line"></div>
</div><!-- fragment --> </div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Sep 22 2014 21:38:30 for glibmm by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.7
</small></address>
</body>
</html>