Sophie

Sophie

distrib > Mandriva > 8.2 > i586 > media > contrib > by-pkgid > 68d373e54fb21da3730c08bede406633 > files > 865

libCommonC++1.9_3-devel-1.9.4-2mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta name="robots" content="noindex">
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>thread.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body bgcolor="#ffffff">
<!-- Generated by Doxygen 1.2.5 on Thu Oct 4 15:32:58 2001 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>thread.h</h1><a href="thread_h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">// Copyright (C) 1999-2001 Open Source Telecom Corporation.</font>
00002 <font class="comment">//  </font>
00003 <font class="comment">// This program is free software; you can redistribute it and/or modify</font>
00004 <font class="comment">// it under the terms of the GNU General Public License as published by</font>
00005 <font class="comment">// the Free Software Foundation; either version 2 of the License, or</font>
00006 <font class="comment">// (at your option) any later version.</font>
00007 <font class="comment">// </font>
00008 <font class="comment">// This program is distributed in the hope that it will be useful,</font>
00009 <font class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</font>
00010 <font class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</font>
00011 <font class="comment">// GNU General Public License for more details.</font>
00012 <font class="comment">// </font>
00013 <font class="comment">// You should have received a copy of the GNU General Public License</font>
00014 <font class="comment">// along with this program; if not, write to the Free Software </font>
00015 <font class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</font>
00016 <font class="comment">// </font>
00017 <font class="comment">// As a special exception to the GNU General Public License, permission is </font>
00018 <font class="comment">// granted for additional uses of the text contained in its release </font>
00019 <font class="comment">// of Common C++.</font>
00020 <font class="comment">// </font>
00021 <font class="comment">// The exception is that, if you link the Common C++ library with other</font>
00022 <font class="comment">// files to produce an executable, this does not by itself cause the</font>
00023 <font class="comment">// resulting executable to be covered by the GNU General Public License.</font>
00024 <font class="comment">// Your use of that executable is in no way restricted on account of</font>
00025 <font class="comment">// linking the Common C++ library code into it.</font>
00026 <font class="comment">//</font>
00027 <font class="comment">// This exception does not however invalidate any other reasons why</font>
00028 <font class="comment">// the executable file might be covered by the GNU General Public License.</font>
00029 <font class="comment">// </font>
00030 <font class="comment">// This exception applies only to the code released under the </font>
00031 <font class="comment">// name Common C++.  If you copy code from other releases into a copy of</font>
00032 <font class="comment">// Common C++, as the General Public License permits, the exception does</font>
00033 <font class="comment">// not apply to the code that you add in this way.  To avoid misleading</font>
00034 <font class="comment">// anyone as to the status of such modified files, you must delete</font>
00035 <font class="comment">// this exception notice from them.</font>
00036 <font class="comment">// </font>
00037 <font class="comment">// If you write modifications of your own for Common C++, it is your choice</font>
00038 <font class="comment">// whether to permit this exception to apply to your modifications.</font>
00039 <font class="comment">// If you do not wish that, delete this exception notice.  </font>
00040 <font class="comment">//</font>
00041 
00042 <font class="preprocessor">#ifndef __CCXX_THREAD_H__</font>
00043 <font class="preprocessor"></font><font class="preprocessor">#define __CCXX_THREAD_H__</font>
00044 <font class="preprocessor"></font><font class="preprocessor">#define __CCXX_POSIX</font>
00045 <font class="preprocessor"></font>
00046 <font class="preprocessor">#ifndef _REENTRANT</font>
00047 <font class="preprocessor"></font><font class="preprocessor">#define _REENTRANT</font>
00048 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00049 <font class="preprocessor"></font>
00050 <font class="preprocessor">#ifndef _THREAD_SAFE</font>
00051 <font class="preprocessor"></font><font class="preprocessor">#define _THREAD_SAFE</font>
00052 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00053 <font class="preprocessor"></font>
00054 <font class="preprocessor">#ifndef __CCXX_CONFIG_H__</font>
00055 <font class="preprocessor"></font><font class="preprocessor">#ifdef  PACKAGE</font>
00056 <font class="preprocessor"></font><font class="preprocessor">#undef  PACKAGE</font>
00057 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00058 <font class="preprocessor"></font><font class="preprocessor">#ifdef  VERSION</font>
00059 <font class="preprocessor"></font><font class="preprocessor">#undef  VERSION</font>
00060 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00061 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/<a class="code" href="config_h.html">config.h</a>&gt;</font>
00062 <font class="preprocessor">#endif</font>
00063 <font class="preprocessor"></font>
00064 <font class="preprocessor">#if defined(__FreeBSD__) &amp;&amp; __FreeBSD__ &lt;= 3</font>
00065 <font class="preprocessor"></font><font class="preprocessor">#define _SYSV_SEMAPHORES</font>
00066 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00067 <font class="preprocessor"></font>
00068 <font class="preprocessor">#ifndef HAVE_PTHREAD_H</font>
00069 <font class="preprocessor"></font><font class="preprocessor">#include &lt;pthread.h&gt;</font>
00070 <font class="preprocessor">#ifndef _SYSV_SEMAPHORES</font>
00071 <font class="preprocessor"></font><font class="preprocessor">#include &lt;semaphore.h&gt;</font>
00072 <font class="preprocessor">#endif</font>
00073 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00074 <font class="preprocessor"></font>
00075 <font class="preprocessor">#ifndef __CCXX_MACROS_H__</font>
00076 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/<a class="code" href="macros_h.html">macros.h</a>&gt;</font>
00077 <font class="preprocessor">#else</font>
00078 <font class="preprocessor"></font><font class="preprocessor">#ifdef  __CCXX_NAMESPACE_H__</font>
00079 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/<a class="code" href="macros_h.html">macros.h</a>&gt;</font>
00080 <font class="preprocessor">#endif</font>
00081 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00082 <font class="preprocessor"></font>
00083 <font class="preprocessor">#include &lt;time.h&gt;</font>
00084 <font class="preprocessor">#include &lt;signal.h&gt;</font>
00085 <font class="preprocessor">#include &lt;setjmp.h&gt;</font>
00086 <font class="preprocessor">#include &lt;unistd.h&gt;</font>
00087 
00088 <font class="preprocessor">#ifdef  __linux__</font>
00089 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_STOPCONT</font>
00090 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_ALARM</font>
00091 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00092 <font class="preprocessor"></font>
00093 <font class="preprocessor">#ifdef  _THR_UNIXWARE</font>
00094 <font class="preprocessor"></font><font class="preprocessor">#define _EFTSAFE</font>
00095 <font class="preprocessor"></font><font class="preprocessor">#undef  PTHREAD_MUTEXTYPE_RECURSIVE</font>
00096 <font class="preprocessor"></font><font class="preprocessor">#undef  _POSIX_THREAD_PRIORITY_SCHEDULING</font>
00097 <font class="preprocessor"></font><font class="preprocessor">#define sigwait(x, y) _thr_sigwait(x, y)</font>
00098 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00099 <font class="preprocessor"></font>
<a name="l00100"></a><a class="code" href="thread_h.html#a0">00100</a> <font class="keyword">typedef</font> pthread_t       cctid_t;
<a name="l00101"></a><a class="code" href="thread_h.html#a1">00101</a> <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font>   timeout_t;
<a name="l00102"></a><a class="code" href="thread_h.html#a2">00102</a> <font class="keyword">typedef</font> <font class="keywordtype">int</font>             signo_t;
00103 
<a name="l00104"></a><a class="code" href="thread_h.html#a41">00104</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> {
00105         THROW_NOTHING, 
00106         THROW_OBJECT, 
00107         THROW_EXCEPTION
00108 }               throw_t;
00109 
00110 <font class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</font>
00111 <font class="preprocessor"></font>
00112 <font class="comment">// use a define so that if the sys/types.h header already defines caddr_t</font>
00113 <font class="comment">// as it may on BSD systems, we do not break it by redefining again.</font>
00114 
00115 <font class="preprocessor">#undef caddr_t</font>
00116 <font class="preprocessor"></font><font class="preprocessor">#define caddr_t         char *</font>
00117 <font class="preprocessor"></font>
00118 <font class="preprocessor">#define ENTER_CRITICAL  EnterMutex();</font>
00119 <font class="preprocessor"></font><font class="preprocessor">#define LEAVE_CRITICAL  LeaveMutex();</font>
00120 <font class="preprocessor"></font><font class="preprocessor">#define ENTER_DEFERRED  setCancel(THREAD_CANCEL_DEFERRED);</font>
00121 <font class="preprocessor"></font><font class="preprocessor">#define LEAVE_DEFERRED  setCancel(THREAD_CANCEL_IMMEDIATE);</font>
00122 <font class="preprocessor"></font>
00123 <font class="comment">// These macros override common functions with thread-safe versions. In</font>
00124 <font class="comment">// particular the common "libc" sleep() has problems since it normally</font>
00125 <font class="comment">// uses SIGARLM (as actually defined by "posix").  The pthread_delay and</font>
00126 <font class="comment">// usleep found in libpthread are gaurenteed not to use SIGALRM and offer</font>
00127 <font class="comment">// higher resolution.  psleep() is defined to call the old process sleep.</font>
00128 
00129 <font class="preprocessor">#undef  sleep</font>
00130 <font class="preprocessor"></font><font class="preprocessor">#define sleep(x)        ccxx_sleep((x) * 1000)</font>
00131 <font class="preprocessor"></font><font class="preprocessor">#define yield()         ccxx_yield()</font>
00132 <font class="preprocessor"></font><font class="preprocessor">#define psleep(x)       (sleep)(x)</font>
00133 <font class="preprocessor"></font>
<a name="l00134"></a><a class="code" href="thread_h.html#a42">00134</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00135 {
00136         THREAD_CANCEL_INITIAL=0,
00137         THREAD_CANCEL_DEFERRED=1,
00138         THREAD_CANCEL_IMMEDIATE,
00139         THREAD_CANCEL_DISABLED,
00140         THREAD_CANCEL_DEFAULT=THREAD_CANCEL_DEFERRED,
00141         THREAD_CANCEL_INVALID
00142 } thread_cancel_t;
00143 
<a name="l00144"></a><a class="code" href="thread_h.html#a43">00144</a> <font class="keyword">typedef</font> <font class="keyword">enum</font>
00145 {
00146         THREAD_SUSPEND_ENABLE,
00147         THREAD_SUSPEND_DISABLE
00148 } thread_suspend_t;
00149 
00150 <font class="preprocessor">#define  THREAD_SIGNAL_BLOCKED  false</font>
00151 <font class="preprocessor"></font><font class="preprocessor">#define  THREAD_SIGNAL_UNBLOCK  true</font>
00152 <font class="preprocessor"></font>        
00153 <font class="preprocessor">#ifdef  _SIG_THREAD_STOPCONT</font>
00154 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_SUSPEND SIGSTOP</font>
00155 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_RESUME  SIGCONT</font>
00156 <font class="preprocessor"></font><font class="preprocessor">#else</font>
00157 <font class="preprocessor"></font><font class="preprocessor">#ifndef SIGUSR3</font>
00158 <font class="preprocessor"></font><font class="preprocessor">#ifdef  SIGWINCH</font>
00159 <font class="preprocessor"></font><font class="preprocessor">#define SIGUSR3 SIGWINCH</font>
00160 <font class="preprocessor"></font><font class="preprocessor">#else</font>
00161 <font class="preprocessor"></font><font class="preprocessor">#define SIGUSR3 SIGINT</font>
00162 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00163 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00164 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_SUSPEND SIGUSR3</font>
00165 <font class="preprocessor"></font><font class="preprocessor">#define _SIG_THREAD_RESUME SIGUSR3</font>
00166 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00167 <font class="preprocessor"></font>
00168 <font class="keyword">class </font><a class="code" href="class_thread.html">Thread</a>;
00169 
00170 <a class="code" href="class_thread.html">Thread</a> *<a class="code" href="thread_h.html#a14">getThread</a>(<font class="keywordtype">void</font>);
00171 
00172 <font class="keyword">extern</font> <font class="stringliteral">"C"</font> {
00173         <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a15">execHandler</a>(<a class="code" href="class_thread.html">Thread</a> *th);
00174         <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a16">sigHandler</a>(<font class="keywordtype">int</font> signo);
00175 };
00176 
<a name="l00185"></a><a class="code" href="class_threadlock.html">00185</a> <font class="keyword">class </font><a class="code" href="class_threadlock.html">ThreadLock</a>
00186 {
00187 <font class="keyword">private</font>:
00188 <font class="preprocessor">#ifdef HAVE_PTHREAD_RWLOCK</font>
00189 <font class="preprocessor"></font>        pthread_rwlock_t _lock;
00190 <font class="preprocessor">#else</font>
00191 <font class="preprocessor"></font>        pthread_mutex_t _lock;
00192 <font class="preprocessor">#endif</font>
00193 <font class="preprocessor"></font>
00194 <font class="keyword">public</font>:
00198         <a class="code" href="class_threadlock.html#a0">ThreadLock</a>();
00199 
00203         <a class="code" href="class_threadlock.html#a1">~ThreadLock</a>();
00204 
00208         <font class="keywordtype">void</font> <a class="code" href="class_threadlock.html#a2">ReadLock</a>(<font class="keywordtype">void</font>);
00209 
00213         <font class="keywordtype">void</font> <a class="code" href="class_threadlock.html#a3">WriteLock</a>(<font class="keywordtype">void</font>);
00214 
00220         <font class="keywordtype">bool</font> <a class="code" href="class_threadlock.html#a4">TryReadLock</a>(<font class="keywordtype">void</font>);
00221 
00227         <font class="keywordtype">bool</font> <a class="code" href="class_threadlock.html#a5">TryWriteLock</a>(<font class="keywordtype">void</font>);
00228 
00232         <font class="keywordtype">void</font> <a class="code" href="class_threadlock.html#a6">Unlock</a>(<font class="keywordtype">void</font>);
00233 };
00234 
<a name="l00278"></a><a class="code" href="class_mutex.html">00278</a> <font class="keyword">class </font><a class="code" href="class_mutex.html">Mutex</a> 
00279 {
00280 <font class="keyword">private</font>:
00281 <font class="preprocessor">#ifndef PTHREAD_MUTEXTYPE_RECURSIVE</font>
00282 <font class="preprocessor"></font>        <font class="keyword">volatile</font> <font class="keywordtype">int</font> _level;
00283         <font class="keyword">volatile</font> <a class="code" href="class_thread.html">Thread</a> *_tid;
00284 <font class="preprocessor">#endif</font>
00285 <font class="preprocessor"></font>
00286 <font class="keyword">protected</font>:
<a name="l00295"></a><a class="code" href="class_mutex.html#n0">00295</a>         pthread_mutex_t _mutex;
00296 
00297 <font class="keyword">public</font>:
00301         <a class="code" href="class_mutex.html#a0">Mutex</a>();
00302 
<a name="l00308"></a><a class="code" href="class_mutex.html#a1">00308</a>         <a class="code" href="class_mutex.html#a1">~Mutex</a>()<font class="keyword"></font>
00309 <font class="keyword">                </font>{pthread_mutex_destroy(&amp;_mutex);};
00310 
00318 <font class="preprocessor">#ifdef  PTHREAD_MUTEXTYPE_RECURSIVE</font>
<a name="l00319"></a><a class="code" href="class_mutex.html#a3">00319</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_mutex.html#a2">EnterMutex</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00320 <font class="keyword">                </font>{pthread_mutex_lock(&amp;_mutex);};
00321 <font class="preprocessor">#else</font>
00322 <font class="preprocessor"></font>        <font class="keywordtype">void</font>    <a class="code" href="class_mutex.html#a2">EnterMutex</a>(<font class="keywordtype">void</font>);
00323 <font class="preprocessor">#endif</font>
00324 <font class="preprocessor"></font>
00335         <font class="keywordtype">bool</font> <a class="code" href="class_mutex.html#a4">TryEnterMutex</a>(<font class="keywordtype">void</font>);
00336 
00347 <font class="preprocessor">#ifdef  PTHREAD_MUTEXTYPE_RECURSIVE</font>
<a name="l00348"></a><a class="code" href="class_mutex.html#a6">00348</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_mutex.html#a5">LeaveMutex</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00349 <font class="keyword">                </font>{pthread_mutex_unlock(&amp;_mutex);};
00350 <font class="preprocessor">#else</font>
00351 <font class="preprocessor"></font>        <font class="keywordtype">void</font> <a class="code" href="class_mutex.html#a5">LeaveMutex</a>(<font class="keywordtype">void</font>);
00352 <font class="preprocessor">#endif</font>
00353 <font class="preprocessor"></font>};
00354 
<a name="l00364"></a><a class="code" href="class_mutexcounter.html">00364</a> <font class="keyword">class </font><a class="code" href="class_mutexcounter.html">MutexCounter</a> : <font class="keyword">public</font> <a class="code" href="class_mutex.html">Mutex</a>
00365 {
00366 <font class="keyword">private</font>:
00367         <font class="keywordtype">int</font>     counter;
00368 
00369 <font class="keyword">public</font>:
00370         <a class="code" href="class_mutexcounter.html#a0">MutexCounter</a>(<font class="keywordtype">int</font> initial = 0);
00371         
00372         <font class="keyword">friend</font> <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a34">operator ++</a>(<a class="code" href="class_mutexcounter.html">MutexCounter</a> &amp;mc);
00373         <font class="keyword">friend</font> <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a35">operator --</a>(<a class="code" href="class_mutexcounter.html">MutexCounter</a> &amp;mc);
00374 };
00375 
<a name="l00386"></a><a class="code" href="class_atomiccounter.html">00386</a> <font class="keyword">class </font><a class="code" href="class_atomiccounter.html">AtomicCounter</a>
00387 {
00388 <font class="keyword">private</font>:
00389 <font class="preprocessor">#ifdef  HAVE_ATOMIC</font>
00390 <font class="preprocessor"></font>        atomic_t atomic;
00391 <font class="preprocessor">#else</font>
00392 <font class="preprocessor"></font>        <font class="keywordtype">int</font> counter;
00393         <a class="code" href="class_mutex.html">Mutex</a> lock;
00394 <font class="preprocessor">#endif</font>
00395 <font class="preprocessor"></font>
00396 <font class="keyword">public</font>:
00400         <a class="code" href="class_atomiccounter.html#a0">AtomicCounter</a>();
00401 
00407         <a class="code" href="class_atomiccounter.html#a0">AtomicCounter</a>(<font class="keywordtype">int</font> value);
00408 
00409         <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a34">operator++</a>(<font class="keywordtype">void</font>);
00410         <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a35">operator--</a>(<font class="keywordtype">void</font>);
00411         <font class="keywordtype">int</font> <a class="code" href="class_atomiccounter.html#a4">operator+=</a>(<font class="keywordtype">int</font> change);
00412         <font class="keywordtype">int</font> <a class="code" href="class_atomiccounter.html#a5">operator-=</a>(<font class="keywordtype">int</font> change);
00413         <font class="keywordtype">int</font> <a class="code" href="class_atomiccounter.html#a6">operator+</a>(<font class="keywordtype">int</font> change);
00414         <font class="keywordtype">int</font> <a class="code" href="class_atomiccounter.html#a7">operator-</a>(<font class="keywordtype">int</font> change);
00415         <font class="keywordtype">int</font> <a class="code" href="class_atomiccounter.html#a8">operator=</a>(<font class="keywordtype">int</font> value);
00416         <font class="keywordtype">bool</font> <a class="code" href="class_atomiccounter.html#a9">operator!</a>(<font class="keywordtype">void</font>);
00417         <a class="code" href="class_atomiccounter.html#a10">operator int</a>();
00418 };
00419 
<a name="l00430"></a><a class="code" href="class_conditional.html">00430</a> <font class="keyword">class </font><a class="code" href="class_conditional.html">Conditional</a> : <font class="keyword">public</font> <a class="code" href="class_mutex.html">Mutex</a>
00431 {
00432 <font class="keyword">protected</font>:
<a name="l00433"></a><a class="code" href="class_conditional.html#n0">00433</a>         pthread_cond_t _cond;
00434 
00435 <font class="keyword">public</font>:
00439         <a class="code" href="class_conditional.html#a0">Conditional</a>();
00440 
<a name="l00444"></a><a class="code" href="class_conditional.html#a1">00444</a>         <a class="code" href="class_conditional.html#a1">~Conditional</a>()<font class="keyword"></font>
00445 <font class="keyword">                </font>{pthread_cond_destroy(&amp;_cond);};
00446 
00452         <font class="keywordtype">void</font> <a class="code" href="class_conditional.html#a2">Signal</a>(<font class="keywordtype">bool</font> broadcast);
00453 
00457         <font class="keywordtype">void</font> <a class="code" href="class_conditional.html#a3">Wait</a>(timeout_t timer = 0); 
00458 };
00459 
<a name="l00477"></a><a class="code" href="class_semaphore.html">00477</a> <font class="keyword">class </font><a class="code" href="class_semaphore.html">Semaphore</a>
00478 {
00479 <font class="keyword">protected</font>:
00480 <font class="preprocessor">#ifdef  _SYSV_SEMAPHORES</font>
00481 <font class="preprocessor"></font>        <font class="keywordtype">int</font> _semaphore;
00482 <font class="preprocessor">#else</font>
<a name="l00483"></a><a class="code" href="class_semaphore.html#n1">00483</a> <font class="preprocessor"></font>        sem_t _semaphore;
00484 <font class="preprocessor">#endif</font>
00485 <font class="preprocessor"></font>
00486 <font class="keyword">public</font>:
00495         <a class="code" href="class_semaphore.html#a0">Semaphore</a>(size_t resource = 0);
00496 
<a name="l00503"></a><a class="code" href="class_semaphore.html#a1">00503</a>         <a class="code" href="class_semaphore.html#a1">~Semaphore</a>()
00504 <font class="preprocessor">#if !defined(__linux__) &amp;&amp; !defined(_SYSV_SEMAPHORES)</font>
00505 <font class="preprocessor"></font>                {sem_destroy(&amp;_semaphore);}
00506 <font class="preprocessor">#endif</font>
00507 <font class="preprocessor"></font>        ;
00508 
<a name="l00522"></a><a class="code" href="class_semaphore.html#a2">00522</a>         <font class="keywordtype">void</font> <a class="code" href="class_semaphore.html#a2">Wait</a>(<font class="keywordtype">void</font>)
00523 <font class="preprocessor">#if !defined(__linux__) &amp;&amp; !defined(_SYSV_SEMAPHORES)</font>
00524 <font class="preprocessor"></font>                {sem_wait(&amp;_semaphore);}
00525 <font class="preprocessor">#endif</font>
00526 <font class="preprocessor"></font>        ;
00527 
<a name="l00539"></a><a class="code" href="class_semaphore.html#a3">00539</a>         <font class="keywordtype">bool</font> <a class="code" href="class_semaphore.html#a3">TryWait</a>(<font class="keywordtype">void</font>)
00540 <font class="preprocessor">#if     !defined(__linux__) &amp;&amp; !defined(_SYSV_SEMAPHORES)</font>
00541 <font class="preprocessor"></font>                { <font class="keywordflow">return</font> ( sem_trywait(&amp;_semaphore) == 0 ) ? <font class="keyword">true</font> : <font class="keyword">false</font>; }
00542 <font class="preprocessor">#endif</font>
00543 <font class="preprocessor"></font>        ;
00544         
<a name="l00556"></a><a class="code" href="class_semaphore.html#a4">00556</a>         <font class="keywordtype">void</font> <a class="code" href="class_semaphore.html#a4">Post</a>(<font class="keywordtype">void</font>)
00557 <font class="preprocessor">#if !defined(__linux__) &amp;&amp; !defined(_SYSV_SEMAPHORES)</font>
00558 <font class="preprocessor"></font>                {sem_post(&amp;_semaphore);}
00559 <font class="preprocessor">#endif</font>
00560 <font class="preprocessor"></font>        ;
00561 
00567         <font class="keywordtype">int</font> <a class="code" href="class_semaphore.html#a5">getValue</a>(<font class="keywordtype">void</font>);
00568 };
00569 
<a name="l00583"></a><a class="code" href="class_event.html">00583</a> <font class="keyword">class </font><a class="code" href="class_event.html">Event</a> : <font class="keyword">public</font> <a class="code" href="class_mutex.html">Mutex</a>
00584 {
00585 <font class="keyword">protected</font>:
<a name="l00586"></a><a class="code" href="class_event.html#n0">00586</a>         pthread_cond_t _cond;
<a name="l00587"></a><a class="code" href="class_event.html#n1">00587</a>         <font class="keywordtype">bool</font> _signaled;
<a name="l00588"></a><a class="code" href="class_event.html#n2">00588</a>         <font class="keywordtype">int</font> _count;
00589 
00590 <font class="keyword">public</font>:
00591         <a class="code" href="class_event.html#a0">Event</a>();
00592 
<a name="l00593"></a><a class="code" href="class_event.html#a1">00593</a>         <a class="code" href="class_event.html#a1">~Event</a>()<font class="keyword"></font>
00594 <font class="keyword">                </font>{pthread_cond_destroy(&amp;_cond);};
00595         
<a name="l00602"></a><a class="code" href="class_event.html#a2">00602</a>         <font class="keywordtype">void</font> <a class="code" href="class_event.html#a2">Reset</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00603 <font class="keyword">                </font>{_signaled = <font class="keyword">false</font>;};
00604 
00608         <font class="keywordtype">void</font> <a class="code" href="class_event.html#a3">Signal</a>(<font class="keywordtype">void</font>);
00617         <font class="keywordtype">bool</font> <a class="code" href="class_event.html#a4">Wait</a>(timeout_t timer = 0);
00618 };
00619 
<a name="l00641"></a><a class="code" href="class_buffer.html">00641</a> <font class="keyword">class </font><a class="code" href="class_buffer.html">Buffer</a>
00642 {
00643 <font class="keyword">private</font>:
00644         <a class="code" href="class_mutex.html">Mutex</a> lock_head, lock_tail;
00645         <a class="code" href="class_semaphore.html">Semaphore</a> size_head, size_tail;
00646         size_t _size;
00647         size_t _used;
00648 
00649 <font class="keyword">protected</font>:
00655         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b0">OnPeek</a>(<font class="keywordtype">void</font> *buf) = 0;
00661         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b1">OnWait</a>(<font class="keywordtype">void</font> *buf) = 0;
00667         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b2">OnPost</a>(<font class="keywordtype">void</font> *buf) = 0;
00668 
00669 <font class="keyword">public</font>:
00674         <a class="code" href="class_buffer.html#a0">Buffer</a>(size_t capacity);
<a name="l00679"></a><a class="code" href="class_buffer.html#a1">00679</a>         <font class="keyword">virtual</font> <a class="code" href="class_buffer.html#a1">~Buffer</a>()<font class="keyword"></font>
00680 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
00681 
<a name="l00686"></a><a class="code" href="class_buffer.html#a2">00686</a>         <font class="keyword">inline</font> size_t <a class="code" href="class_buffer.html#a2">getSize</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00687 <font class="keyword">                </font>{<font class="keywordflow">return</font> _size;};
00688         
<a name="l00695"></a><a class="code" href="class_buffer.html#a3">00695</a>         <font class="keyword">inline</font> size_t <a class="code" href="class_buffer.html#a3">getUsed</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00696 <font class="keyword">                </font>{<font class="keywordflow">return</font> _used;};
00697 
00706         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#a4">Wait</a>(<font class="keywordtype">void</font> *buf);
00707 
00715         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#a5">Post</a>(<font class="keywordtype">void</font> *buf);
00716 
00723         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#a6">Peek</a>(<font class="keywordtype">void</font> *buf);
00724 
<a name="l00729"></a><a class="code" href="class_buffer.html#a7">00729</a>         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="class_buffer.html#a7">isValid</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00730 <font class="keyword">                </font>{<font class="keywordflow">return</font> <font class="keyword">true</font>;};
00731 };
00732 
<a name="l00740"></a><a class="code" href="class_fixedbuffer.html">00740</a> <font class="keyword">class </font><a class="code" href="class_fixedbuffer.html">FixedBuffer</a> : <font class="keyword">public</font> <a class="code" href="class_buffer.html">Buffer</a>
00741 {
00742 <font class="keyword">private</font>:
00743         <font class="keywordtype">char</font> *buf, *head, *tail;
00744         size_t objsize;
00745 
00746 <font class="keyword">protected</font>:
00752         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b0">OnPeek</a>(<font class="keywordtype">void</font> *buf);
00753 
00759         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b1">OnWait</a>(<font class="keywordtype">void</font> *buf);
00760 
00766         <font class="keywordtype">int</font> <a class="code" href="class_buffer.html#b2">OnPost</a>(<font class="keywordtype">void</font> *buf);  
00767 
00768 <font class="keyword">public</font>:
00776         <a class="code" href="class_fixedbuffer.html#a0">FixedBuffer</a>(size_t capacity, size_t objsize);
00777 
00784         <a class="code" href="class_fixedbuffer.html#a0">FixedBuffer</a>(<font class="keyword">const</font> <a class="code" href="class_fixedbuffer.html">FixedBuffer</a> &amp;fb);
00785 
00789         <a class="code" href="class_fixedbuffer.html#a2">~FixedBuffer</a>();
00790 
00791         <a class="code" href="class_fixedbuffer.html">FixedBuffer</a> &amp;<a class="code" href="class_fixedbuffer.html#a3">operator=</a>(<font class="keyword">const</font> <a class="code" href="class_fixedbuffer.html">FixedBuffer</a> &amp;fb);
00792 
00793         <font class="keywordtype">bool</font> <a class="code" href="class_buffer.html#a7">isValid</a>(<font class="keywordtype">void</font>);
00794 };
00795 
<a name="l00943"></a><a class="code" href="class_thread.html">00943</a> <font class="keyword">class </font><a class="code" href="class_thread.html">Thread</a>
00944 {
00945 <font class="keyword">private</font>:
<a name="l00946"></a><a class="code" href="class_thread.html#l0">00946</a>         <font class="keyword">friend</font> <font class="keyword">class </font><a class="code" href="class_slog.html">Slog</a>;
00947 
00948         <font class="keyword">static</font> <a class="code" href="class_thread.html">Thread</a> *_main;
00949 
00950 <font class="preprocessor">#ifndef _SIG_THREAD_ALARM</font>
00951 <font class="preprocessor"></font>        <font class="keyword">static</font> <a class="code" href="class_thread.html">Thread</a> *_timer;
00952         <font class="keyword">static</font> <a class="code" href="class_mutex.html">Mutex</a> _arm;
00953 <font class="preprocessor">#endif</font>
00954 <font class="preprocessor"></font>        
00955         <a class="code" href="class_thread.html">Thread</a> *_parent;
00956         pthread_t _tid;
00957         pthread_attr_t _attr;
00958         thread_cancel_t _cancel;
00959         jmp_buf _env;
00960         time_t  _alarm;
00961         <a class="code" href="class_semaphore.html">Semaphore</a> *_start;
00962         <font class="keywordtype">int</font> _msgpos;
00963         <font class="keywordtype">char</font> _msgbuf[128];
00964         throw_t _throw;
00965 
00966         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a15">execHandler</a>(<a class="code" href="class_thread.html">Thread</a> *th);
00967         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a16">sigHandler</a>(<font class="keywordtype">int</font> signo);
00968         <font class="keyword">friend</font> <a class="code" href="class_thread.html">Thread</a> *<a class="code" href="thread_h.html#a14">getThread</a>(<font class="keywordtype">void</font>);
00969 
00970 <font class="keyword">protected</font>:
00980         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b0">Run</a>(<font class="keywordtype">void</font>) = 0;
00981 
<a name="l00988"></a><a class="code" href="class_thread.html#b1">00988</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b1">First</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00989 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
00990         
<a name="l01003"></a><a class="code" href="class_thread.html#b2">01003</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b2">Final</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01004 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01005 
<a name="l01016"></a><a class="code" href="class_thread.html#b3">01016</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b3">Initial</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01017 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01018         
<a name="l01028"></a><a class="code" href="class_thread.html#b4">01028</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> *<a class="code" href="class_thread.html#b4">getExtended</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01029 <font class="keyword">                </font>{<font class="keywordflow">return</font> NULL;};
01030 
<a name="l01038"></a><a class="code" href="class_thread.html#b5">01038</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b5">Notify</a>(<a class="code" href="class_thread.html">Thread</a> *th)<font class="keyword"></font>
01039 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01040 
<a name="l01047"></a><a class="code" href="class_thread.html#b6">01047</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b6">SignalParent</a>(signo_t signo)<font class="keyword"></font>
01048 <font class="keyword">                </font>{_parent-&gt;<a class="code" href="class_thread.html#a7">SignalThread</a>(signo);};
01049 
<a name="l01056"></a><a class="code" href="class_thread.html#b7">01056</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b7">SignalMain</a>(signo_t signo)<font class="keyword"></font>
01057 <font class="keyword">                </font>{_main-&gt;<a class="code" href="class_thread.html#a7">SignalThread</a>(signo);};
01058 
<a name="l01063"></a><a class="code" href="class_thread.html#b8">01063</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b8">OnTimer</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01064 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01065 
<a name="l01070"></a><a class="code" href="class_thread.html#b9">01070</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b9">OnHangup</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01071 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01072 
<a name="l01077"></a><a class="code" href="class_thread.html#b10">01077</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b10">OnException</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01078 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01079 
<a name="l01084"></a><a class="code" href="class_thread.html#b11">01084</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b11">OnDisconnect</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01085 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01086 
<a name="l01091"></a><a class="code" href="class_thread.html#b12">01091</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b12">OnPolling</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01092 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01093 
<a name="l01100"></a><a class="code" href="class_thread.html#b13">01100</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b13">OnSignal</a>(<font class="keywordtype">int</font> signo)<font class="keyword"></font>
01101 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01102 
<a name="l01112"></a><a class="code" href="class_thread.html#b14">01112</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b14">Sleep</a>(timeout_t msec)<font class="keyword"></font>
01113 <font class="keyword">                </font>{<a class="code" href="thread_h.html#a37">ccxx_sleep</a>(msec);};
01114 
<a name="l01120"></a><a class="code" href="class_thread.html#b15">01120</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b15">Exit</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01121 <font class="keyword">                </font>{longjmp(_env, 1);};
01122                
01132         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b16">setTimer</a>(timeout_t timer);
01139         timeout_t <a class="code" href="class_thread.html#b17">getTimer</a>(<font class="keywordtype">void</font>);
01145         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b18">endTimer</a>(<font class="keywordtype">void</font>);
01152         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b19">WaitSignal</a>(signo_t signo);
01157         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b20">Yield</a>(<font class="keywordtype">void</font>);
01161         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b21">testCancel</a>(<font class="keywordtype">void</font>);
01170         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b22">setCancel</a>(thread_cancel_t mode);
01178         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b23">setSuspend</a>(thread_suspend_t mode);
01185         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b24">setSignal</a>(<font class="keywordtype">int</font> signo, <font class="keywordtype">bool</font> mode);
01194         <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b25">Terminate</a>(<font class="keywordtype">void</font>);
01195 
<a name="l01199"></a><a class="code" href="class_thread.html#b26">01199</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#b26">clrParent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01200 <font class="keyword">                </font>{_parent = NULL;};
01201 <font class="keyword">public</font>:
01210         <a class="code" href="class_thread.html#a0">Thread</a>(<font class="keywordtype">bool</font> flag);
01223         <a class="code" href="class_thread.html#a0">Thread</a>(<a class="code" href="class_semaphore.html">Semaphore</a> *start = NULL, <font class="keywordtype">int</font> pri = 0, size_t stack = 0);
01231         <a class="code" href="class_thread.html#a0">Thread</a>(<font class="keyword">const</font> <a class="code" href="class_thread.html">Thread</a> &amp;th);
<a name="l01238"></a><a class="code" href="class_thread.html#a3">01238</a>         <font class="keyword">virtual</font> <a class="code" href="class_thread.html#a3">~Thread</a>()<font class="keyword"></font>
01239 <font class="keyword">                </font>{<a class="code" href="class_thread.html#b25">Terminate</a>();};
01240         
01253         <font class="keywordtype">int</font> <a class="code" href="class_thread.html#a4">Start</a>(<a class="code" href="class_semaphore.html">Semaphore</a> *start = NULL);
01254 
01263         <font class="keywordtype">int</font> <a class="code" href="class_thread.html#a5">Detach</a>(<a class="code" href="class_semaphore.html">Semaphore</a> *start = NULL);
01264 
<a name="l01271"></a><a class="code" href="class_thread.html#a6">01271</a>         <font class="keyword">inline</font> <a class="code" href="class_thread.html">Thread</a> *<a class="code" href="class_thread.html#a6">getParent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01272 <font class="keyword">                </font>{<font class="keywordflow">return</font> _parent;};
01273                 
<a name="l01279"></a><a class="code" href="class_thread.html#a7">01279</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a7">SignalThread</a>(<font class="keywordtype">int</font> signo)<font class="keyword"></font>
01280 <font class="keyword">                </font>{pthread_kill(_tid, signo);};
01281 
01288 <font class="preprocessor">#ifdef _THR_SUNOS5</font>
<a name="l01289"></a><a class="code" href="class_thread.html#a8">01289</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a8">Suspend</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01290 <font class="keyword">                </font>{thr_suspend((thread_t)_tid);};
01291 <font class="preprocessor">#else</font>
<a name="l01292"></a><a class="code" href="class_thread.html#a9">01292</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a8">Suspend</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01293 <font class="keyword">                </font>{pthread_kill(_tid, _SIG_THREAD_SUSPEND);};
01294 <font class="preprocessor">#endif</font>
01295 <font class="preprocessor"></font>
01299 <font class="preprocessor">#ifdef  _THR_SUNOS5</font>
<a name="l01300"></a><a class="code" href="class_thread.html#a10">01300</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a10">Resume</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01301 <font class="keyword">                </font>{thr_continue((thread_t)_tid);};
01302 <font class="preprocessor">#else</font>
<a name="l01303"></a><a class="code" href="class_thread.html#a11">01303</a> <font class="preprocessor"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#a10">Resume</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01304 <font class="keyword">                </font>{pthread_kill(_tid, _SIG_THREAD_RESUME);};
01305 <font class="preprocessor">#endif</font>
01306 <font class="preprocessor"></font>
<a name="l01313"></a><a class="code" href="class_thread.html#a12">01313</a>         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_thread.html#a12">getCancel</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01314 <font class="keyword">                </font>{<font class="keywordflow">return</font> _cancel;};
01315 
01322         <font class="keywordtype">bool</font> <a class="code" href="class_thread.html#a13">isRunning</a>(<font class="keywordtype">void</font>);
01323 
01330         <font class="keywordtype">bool</font> <a class="code" href="class_thread.html#a14">isThread</a>(<font class="keywordtype">void</font>);
01331 
01337         <font class="keyword">friend</font> throw_t <a class="code" href="class_thread.html#l4">getException</a>(<font class="keywordtype">void</font>);
01338 
01344         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#l5">setException</a>(throw_t mode);
01345 
01351         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a37">ccxx_sleep</a>(timeout_t msec);
01352 
<a name="l01358"></a><a class="code" href="class_thread.html#l7">01358</a>         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#l7">suspend</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th)<font class="keyword"></font>
01359 <font class="keyword">                </font>{pthread_kill(th._tid, _SIG_THREAD_SUSPEND);};
01360 
<a name="l01366"></a><a class="code" href="class_thread.html#l8">01366</a>         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#l8">resume</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th)<font class="keyword"></font>
01367 <font class="keyword">                </font>{pthread_kill(th._tid, _SIG_THREAD_RESUME);};
01368 
<a name="l01375"></a><a class="code" href="class_thread.html#l9">01375</a>         <font class="keyword">friend</font> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a34">operator++</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th)<font class="keyword"></font>
01376 <font class="keyword">                </font>{th._start-&gt;<a class="code" href="class_buffer.html#a5">Post</a>();};
01377 
<a name="l01378"></a><a class="code" href="class_thread.html#l10">01378</a>         <font class="keyword">friend</font> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a35">operator--</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th)<font class="keyword"></font>
01379 <font class="keyword">                </font>{th._start-&gt;<a class="code" href="class_buffer.html#a4">Wait</a>();};
01380 
<a name="l01384"></a><a class="code" href="class_thread.html#l11">01384</a>         <font class="keyword">friend</font> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="class_thread.html#l11">start</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th, <a class="code" href="class_semaphore.html">Semaphore</a> *start)<font class="keyword"></font>
01385 <font class="keyword">                </font>{<font class="keywordflow">return</font> th.<a class="code" href="class_thread.html#a4">Start</a>(start);};
01386 
01394         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="class_thread.html#l12">siginstall</a>(<font class="keywordtype">int</font> signo);
01395 };
01396 
<a name="l01411"></a><a class="code" href="class_threadkey.html">01411</a> <font class="keyword">class </font><a class="code" href="class_threadkey.html">ThreadKey</a>
01412 {
01413 <font class="keyword">private</font>:
01414         pthread_key_t key;
01415 
01416 <font class="keyword">public</font>:
01420         <a class="code" href="class_threadkey.html#a0">ThreadKey</a>();
01424         <a class="code" href="class_threadkey.html#a1">~ThreadKey</a>();
01432         <font class="keywordtype">void</font> *<a class="code" href="thread_h.html#a17">getKey</a>(<font class="keywordtype">void</font>);
01440         <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a18">setKey</a>(<font class="keywordtype">void</font> *);
01441 };
01442 
<a name="l01453"></a><a class="code" href="class_timerport.html">01453</a> <font class="keyword">class </font><a class="code" href="class_timerport.html">TimerPort</a>
01454 {
01455         <font class="keyword">struct </font>timeval timer;
01456         <font class="keywordtype">bool</font> active;
01457 
01458 <font class="keyword">public</font>:
01465         <a class="code" href="class_timerport.html#a0">TimerPort</a>();
01466 
01475         <font class="keywordtype">void</font> <a class="code" href="class_timerport.html#a1">setTimer</a>(timeout_t timeout = 0);
01476 
01486         <font class="keywordtype">void</font> <a class="code" href="class_timerport.html#a2">incTimer</a>(timeout_t timeout);
01487 
01493         <font class="keywordtype">void</font> <a class="code" href="class_timerport.html#a3">endTimer</a>(<font class="keywordtype">void</font>);
01494 
01505         timeout_t <a class="code" href="class_timerport.html#a4">getTimer</a>(<font class="keywordtype">void</font>);
01506 
01515         timeout_t <a class="code" href="class_timerport.html#a5">getElapsed</a>(<font class="keywordtype">void</font>);
01516 };
01517 
<a name="l01518"></a><a class="code" href="thread_h.html#a17">01518</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> *<a class="code" href="thread_h.html#a17">getKey</a>(<a class="code" href="class_threadkey.html">ThreadKey</a> &amp;tk)<font class="keyword"></font>
01519 <font class="keyword">        </font>{<font class="keywordflow">return</font> tk.<a class="code" href="class_threadkey.html#a2">getKey</a>();};
01520 
<a name="l01521"></a><a class="code" href="thread_h.html#a18">01521</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a18">setKey</a>(<a class="code" href="class_threadkey.html">ThreadKey</a> &amp;tk, <font class="keywordtype">void</font> *ptr)<font class="keyword"></font>
01522 <font class="keyword">        </font>{tk.<a class="code" href="class_threadkey.html#a3">setKey</a>(ptr);};
01523 
<a name="l01524"></a><a class="code" href="thread_h.html#a19">01524</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a34">operator ++</a>(<a class="code" href="class_mutex.html">Mutex</a> &amp;m)<font class="keyword"></font>
01525 <font class="keyword">        </font>{m.<a class="code" href="class_mutex.html#a2">EnterMutex</a>();};
01526                 
<a name="l01527"></a><a class="code" href="thread_h.html#a20">01527</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a35">operator --</a>(<a class="code" href="class_mutex.html">Mutex</a> &amp;m)<font class="keyword"></font>
01528 <font class="keyword">        </font>{m.<a class="code" href="class_mutex.html#a5">LeaveMutex</a>();};
01529 
<a name="l01530"></a><a class="code" href="thread_h.html#a21">01530</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a34">operator ++</a>(<a class="code" href="class_semaphore.html">Semaphore</a> &amp;s)<font class="keyword"></font>
01531 <font class="keyword">        </font>{s.<a class="code" href="class_semaphore.html#a4">Post</a>();};
01532 
<a name="l01533"></a><a class="code" href="thread_h.html#a22">01533</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a35">operator --</a>(<a class="code" href="class_semaphore.html">Semaphore</a> &amp;s)<font class="keyword"></font>
01534 <font class="keyword">        </font>{s.<a class="code" href="class_semaphore.html#a2">Wait</a>();};
01535 
<a name="l01536"></a><a class="code" href="thread_h.html#a23">01536</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a34">operator ++</a>(<a class="code" href="class_event.html">Event</a> &amp;s)<font class="keyword"></font>
01537 <font class="keyword">        </font>{s.<a class="code" href="class_event.html#a3">Signal</a>();};
01538 
<a name="l01539"></a><a class="code" href="thread_h.html#a24">01539</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a35">operator --</a>(<a class="code" href="class_event.html">Event</a> &amp;s)<font class="keyword"></font>
01540 <font class="keyword">        </font>{s.<a class="code" href="class_event.html#a4">Wait</a>();};
01541 
01542 <font class="comment">/*</font>
01543 <font class="comment"> * on some systems, signal(signum, handler) is a macro</font>
01544 <font class="comment"> */</font>
01545 <font class="preprocessor">#undef signal</font>
<a name="l01546"></a><a class="code" href="thread_h.html#a25">01546</a> <font class="preprocessor"></font><font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a27">signal</a>(<a class="code" href="class_thread.html">Thread</a> &amp;th, <font class="keywordtype">int</font> signo)<font class="keyword"></font>
01547 <font class="keyword">        </font>{th.<a class="code" href="class_thread.html#a7">SignalThread</a>(signo);};
01548 
<a name="l01549"></a><a class="code" href="thread_h.html#a26">01549</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a27">signal</a>(<a class="code" href="class_event.html">Event</a> &amp;ev)<font class="keyword"></font>
01550 <font class="keyword">        </font>{ev.<a class="code" href="class_event.html#a3">Signal</a>();};
01551 
<a name="l01552"></a><a class="code" href="thread_h.html#a27">01552</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a27">signal</a>(<a class="code" href="class_semaphore.html">Semaphore</a> &amp;sem)<font class="keyword"></font>
01553 <font class="keyword">        </font>{sem.<a class="code" href="class_semaphore.html#a4">Post</a>();};
01554 
<a name="l01555"></a><a class="code" href="thread_h.html#a28">01555</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a39">wait</a>(<a class="code" href="class_semaphore.html">Semaphore</a> &amp;sem)<font class="keyword"></font>
01556 <font class="keyword">        </font>{sem.<a class="code" href="class_semaphore.html#a2">Wait</a>();};
01557 
<a name="l01558"></a><a class="code" href="thread_h.html#a29">01558</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a39">wait</a>(<a class="code" href="class_event.html">Event</a> &amp;ev, timeout_t timer)<font class="keyword"></font>
01559 <font class="keyword">        </font>{ev.<a class="code" href="class_event.html#a4">Wait</a>(timer);};
01560 
<a name="l01561"></a><a class="code" href="thread_h.html#a30">01561</a> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="thread_h.html#a30">reset</a>(<a class="code" href="class_event.html">Event</a> &amp;ev)<font class="keyword"></font>
01562 <font class="keyword">        </font>{ev.<a class="code" href="class_event.html#a2">Reset</a>();};
01563 
<a name="l01564"></a><a class="code" href="thread_h.html#a31">01564</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a31">get</a>(<a class="code" href="class_buffer.html">Buffer</a> &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01565 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.<a class="code" href="class_buffer.html#a4">Wait</a>(o);};
01566 
<a name="l01567"></a><a class="code" href="thread_h.html#a32">01567</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a32">put</a>(<a class="code" href="class_buffer.html">Buffer</a> &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01568 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.<a class="code" href="class_buffer.html#a5">Post</a>(o);};
01569 
<a name="l01570"></a><a class="code" href="thread_h.html#a33">01570</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a33">peek</a>(<a class="code" href="class_buffer.html">Buffer</a> &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01571 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.<a class="code" href="class_buffer.html#a6">Peek</a>(o);};
01572 
01573 <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a34">operator++</a>(<a class="code" href="class_mutexcounter.html">MutexCounter</a> &amp;mc);
01574 <font class="keywordtype">int</font> <a class="code" href="thread_h.html#a35">operator--</a>(<a class="code" href="class_mutexcounter.html">MutexCounter</a> &amp;mc);
01575 
01576 <font class="keyword">struct  </font>timespec *gettimeout(struct timespec *spec, timeout_t timeout); 
01577 <font class="keywordtype">void</font>    <a class="code" href="thread_h.html#a37">ccxx_sleep</a>(timeout_t msec);
01578 <font class="keywordtype">void</font>    <a class="code" href="thread_h.html#a38">ccxx_yield</a>(<font class="keywordtype">void</font>);
01579 <font class="keywordtype">void</font>    <a class="code" href="thread_h.html#a39">wait</a>(signo_t signo);
01588 <font class="keywordtype">void</font>    <a class="code" href="thread_h.html#a40">pdetach</a>(<font class="keywordtype">void</font>);
01589 
01590 <font class="preprocessor">#ifdef  __CCXX_NAMESPACE_H__</font>
01591 <font class="preprocessor"></font><font class="preprocessor">#undef  __CCXX_NAMESPACE_H__</font>
01592 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/<a class="code" href="namespace_h.html">namespace.h</a>&gt;</font>
01593 <font class="preprocessor">#endif</font>
01594 <font class="preprocessor"></font>
01595 <font class="preprocessor">#if defined(HAVE_POLL_H) || defined(HAVE_SYS_POLL_H)</font>
01596 <font class="preprocessor"></font><font class="preprocessor">#if defined(HAVE_SYS_STREAM_H)</font>
01597 <font class="preprocessor"></font><font class="preprocessor">#if defined(__linux__)</font>
01598 <font class="preprocessor"></font><font class="preprocessor">#define __CCXX_USE_POLL 1</font>
01599 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01600 <font class="preprocessor"></font><font class="preprocessor">#else</font>
01601 <font class="preprocessor"></font><font class="preprocessor">#define __CCXX_USE_POLL 1</font>
01602 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01603 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01604 <font class="preprocessor"></font>
01605 <font class="preprocessor">#ifdef __CCXX_USE_POLL</font>
01606 <font class="preprocessor"></font>
<a name="l01614"></a><a class="code" href="class_poller.html">01614</a> <font class="keyword">class </font><a class="code" href="class_poller.html">Poller</a> 
01615 {
01616 <font class="keyword">private</font>:
01617         <font class="keywordtype">int</font> nufds;
01618         pollfd *ufds;
01619 
01620 <font class="keyword">public</font>:
01621         <a class="code" href="class_poller.html#a0">Poller</a>();
01622 
01623         <a class="code" href="class_poller.html#a1">~Poller</a>();
01624 
01632         pollfd *<a class="code" href="class_poller.html#a3">getList</a>(<font class="keywordtype">int</font> cnt);
01633 
<a name="l01639"></a><a class="code" href="class_poller.html#a3">01639</a>         <font class="keyword">inline</font>  pollfd *<a class="code" href="class_poller.html#a3">getList</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01640 <font class="keyword">                </font>{<font class="keywordflow">return</font> ufds;};
01641 };
01642 <font class="preprocessor">#endif</font>
01643 <font class="preprocessor"></font>
01644 
01645 <font class="preprocessor">#endif</font>
01646 <font class="preprocessor"></font>
</div></pre><hr><address><small>Generated at Thu Oct 4 15:32:58 2001 for CommonC++ by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.gif" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.5 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>