Sophie

Sophie

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><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.10 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</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="namespacemembers.html">Namespace Members</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_8h.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 
00041 <font class="preprocessor">#ifndef CCXX_THREAD_H_</font>
00042 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_THREAD_H_</font>
00043 <font class="preprocessor"></font>
00044 <font class="preprocessor">#ifndef WIN32</font>
<a name="l00045"></a><a class="code" href="thread_8h.html#a0">00045</a> <font class="preprocessor"></font><font class="preprocessor">#define CCXX_POSIX</font>
00046 <font class="preprocessor"></font><font class="preprocessor">#endif // !WIN32</font>
00047 <font class="preprocessor"></font>
00048 <font class="preprocessor">#ifndef CCXX_CONFIG_H_</font>
00049 <font class="preprocessor"></font><font class="preprocessor">#include &lt;cc++/config.h&gt;</font>
00050 <font class="preprocessor">#endif</font>
00051 <font class="preprocessor"></font>
00052 <font class="preprocessor">#ifndef CCXX_EXCEPTION_H_</font>
00053 <font class="preprocessor"></font><font class="preprocessor">#include &lt;<a class="code" href="exception_8h.html">cc++/exception.h</a>&gt;</font>
00054 <font class="preprocessor">#endif</font>
00055 <font class="preprocessor"></font>
00056 <font class="preprocessor">#ifndef WIN32</font>
00057 <font class="preprocessor"></font><font class="preprocessor">#if defined(__FreeBSD__) &amp;&amp; __FreeBSD__ &lt;= 3</font>
00058 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_SYSV_SEMAPHORES</font>
00059 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00060 <font class="preprocessor"></font>
00061 <font class="preprocessor">#ifndef HAVE_PTHREAD_H</font>
00062 <font class="preprocessor"></font><font class="preprocessor">#include &lt;pthread.h&gt;</font>
00063 <font class="preprocessor">#ifndef CCXX_SYSV_SEMAPHORES</font>
00064 <font class="preprocessor"></font><font class="preprocessor">#include &lt;semaphore.h&gt;</font>
00065 <font class="preprocessor">#endif</font>
00066 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00067 <font class="preprocessor"></font><font class="preprocessor">#endif // !WIN32</font>
00068 <font class="preprocessor"></font>
00069 <font class="preprocessor">#include &lt;setjmp.h&gt;</font> <font class="comment">// for jmp_buf, longjmp</font>
00070 
00071 <font class="preprocessor">#ifndef WIN32</font>
00072 <font class="preprocessor"></font><font class="preprocessor">#include &lt;time.h&gt;</font>
00073 <font class="preprocessor">#include &lt;signal.h&gt;</font>
00074 <font class="preprocessor">#include &lt;unistd.h&gt;</font>
00075 
00076 <font class="preprocessor">#ifdef  __linux__</font>
00077 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_SIG_THREAD_ALARM</font>
00078 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_SIG_THREAD_STOPCONT </font>
00079 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00080 <font class="preprocessor"></font>
00081 <font class="preprocessor">#ifdef  _THR_UNIXWARE</font>
00082 <font class="preprocessor"></font><font class="preprocessor">#undef  PTHREAD_MUTEXTYPE_RECURSIVE</font>
00083 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00084 <font class="preprocessor"></font>
<a name="l00085"></a><a class="code" href="thread_8h.html#a10">00085</a> <font class="keyword">typedef</font> pthread_t       cctid_t;
<a name="l00086"></a><a class="code" href="thread_8h.html#a11">00086</a> <font class="keyword">typedef</font> <font class="keywordtype">unsigned</font> <font class="keywordtype">long</font>   timeout_t;
00087 <font class="preprocessor">#else // WIN32</font>
00088 <font class="preprocessor"></font><font class="keyword">typedef</font> DWORD   cctid_t;
00089 <font class="keyword">typedef</font> DWORD   timeout_t;
00090 
00091 <font class="preprocessor">#define MAX_SEM_VALUE   1000000</font>
00092 <font class="preprocessor"></font><font class="preprocessor">#if defined(__MINGW32__) || defined(__CYGWIN32__)</font>
00093 <font class="preprocessor"></font><font class="preprocessor">#include &lt;Windows32/CommonFunctions.h&gt;</font>
00094 <font class="preprocessor">#else</font>
00095 <font class="preprocessor"></font>__declspec(dllimport) <font class="keywordtype">long</font> __stdcall InterlockedIncrement(<font class="keywordtype">long</font> *);
00096 __declspec(dllimport) <font class="keywordtype">long</font> __stdcall InterlockedDecrement(<font class="keywordtype">long</font> *);
00097 __declspec(dllimport) <font class="keywordtype">long</font> __stdcall InterlockedExchange(<font class="keywordtype">long</font> *, <font class="keywordtype">long</font>);
00098 <font class="preprocessor">#endif</font>
00099 <font class="preprocessor"></font>
00100 <font class="preprocessor">#endif // !WIN32</font>
00101 <font class="preprocessor"></font>
00102 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
00103 <font class="preprocessor"></font><font class="keyword">namespace </font>ost {
00104 <font class="preprocessor">#endif</font>
00105 <font class="preprocessor"></font>
<a name="l00106"></a><a class="code" href="namespaceost.html#a253">00106</a> <font class="keyword">enum</font> throw_t {
00107         THROW_NOTHING, 
00108         THROW_OBJECT, 
00109         THROW_EXCEPTION
00110 };
<a name="l00111"></a><a class="code" href="namespaceost.html#a138">00111</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> throw_t throw_t;
00112 <font class="keyword">class </font>Thread;
00113 
<a name="l00114"></a><a class="code" href="thread_8h.html#a1">00114</a> <font class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</font>
00115 <font class="preprocessor"></font>
<a name="l00116"></a><a class="code" href="thread_8h.html#a2">00116</a> <font class="preprocessor">#define ENTER_CRITICAL  EnterMutex();</font>
<a name="l00117"></a><a class="code" href="thread_8h.html#a3">00117</a> <font class="preprocessor"></font><font class="preprocessor">#define LEAVE_CRITICAL  LeaveMutex();</font>
<a name="l00118"></a><a class="code" href="thread_8h.html#a4">00118</a> <font class="preprocessor"></font><font class="preprocessor">#define ENTER_DEFERRED  setCancel(THREAD_CANCEL_DEFERRED);</font>
<a name="l00119"></a><a class="code" href="thread_8h.html#a5">00119</a> <font class="preprocessor"></font><font class="preprocessor">#define LEAVE_DEFERRED  setCancel(THREAD_CANCEL_IMMEDIATE);</font>
00120 <font class="preprocessor"></font>
<a name="l00121"></a><a class="code" href="namespaceost.html#a254">00121</a> <font class="keyword">enum</font> thread_cancel_t
00122 {
00123         THREAD_CANCEL_INITIAL=0,
00124         THREAD_CANCEL_DEFERRED=1,
00125         THREAD_CANCEL_IMMEDIATE,
00126         THREAD_CANCEL_DISABLED,
00127         THREAD_CANCEL_DEFAULT=THREAD_CANCEL_DEFERRED
00128 };
<a name="l00129"></a><a class="code" href="namespaceost.html#a139">00129</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> thread_cancel_t thread_cancel_t;
00130 
<a name="l00131"></a><a class="code" href="namespaceost.html#a255">00131</a> <font class="keyword">enum</font> thread_suspend_t
00132 {
00133         THREAD_SUSPEND_ENABLE,
00134         THREAD_SUSPEND_DISABLE
00135 };
<a name="l00136"></a><a class="code" href="namespaceost.html#a140">00136</a> <font class="keyword">typedef</font> <font class="keyword">enum</font> thread_suspend_t thread_suspend_t;
00137 
00138 <font class="preprocessor">#ifndef WIN32</font>
00139 <font class="preprocessor"></font><font class="comment">// These macros override common functions with thread-safe versions. In</font>
00140 <font class="comment">// particular the common "libc" sleep() has problems since it normally</font>
00141 <font class="comment">// uses SIGARLM (as actually defined by "posix").  The pthread_delay and</font>
00142 <font class="comment">// usleep found in libpthread are gaurenteed not to use SIGALRM and offer</font>
00143 <font class="comment">// higher resolution.  psleep() is defined to call the old process sleep.</font>
00144 
00145 <font class="preprocessor">#undef  sleep</font>
<a name="l00146"></a><a class="code" href="thread_8h.html#a6">00146</a> <font class="preprocessor"></font><font class="preprocessor">#define psleep(x)       (sleep)(x)</font>
00147 <font class="preprocessor"></font>
00148 <font class="preprocessor">#ifndef CCXX_SIG_THREAD_STOPCONT</font>
00149 <font class="preprocessor"></font><font class="preprocessor">#ifndef _THR_SUNOS5</font>
00150 <font class="preprocessor"></font><font class="preprocessor">#ifndef HAVE_PTHREAD_SUSPEND</font>
00151 <font class="preprocessor"></font><font class="keyword">static</font> RETSIGTYPE ccxx_sigsuspend(<font class="keywordtype">int</font>);
00152 <font class="preprocessor">#endif</font>
00153 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00154 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00155 <font class="preprocessor"></font><font class="keyword">extern</font> <font class="stringliteral">"C"</font> <font class="keywordtype">void</font> <a class="code" href="namespaceost.html#a218">execHandler</a>(Thread *th);
00156 
00157 <font class="preprocessor">#endif // !WIN32</font>
00158 <font class="preprocessor"></font>
00159 
00160 CCXX_EXPORT(Thread*) <a class="code" href="namespaceost.html#a219">getThread</a>(<font class="keywordtype">void</font>);
00161 CCXX_EXPORT(throw_t) <a class="code" href="namespaceost.html#a220">getException</a>(<font class="keywordtype">void</font>);
00162 CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="namespaceost.html#a221">setException</a>(throw_t mode);
00163 CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="namespaceost.html#a222">ccxx_sleep</a>(timeout_t msec);
00164 CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="namespaceost.html#a223">ccxx_yield</a>(<font class="keywordtype">void</font>);
00165 
00166 <font class="preprocessor">#undef Yield</font>
<a name="l00167"></a><a class="code" href="thread_8h.html#a7">00167</a> <font class="preprocessor"></font><font class="preprocessor">#define sleep(x)        ccxx_sleep((x) * 1000)</font>
<a name="l00168"></a><a class="code" href="thread_8h.html#a8">00168</a> <font class="preprocessor"></font><font class="preprocessor">#define yield()         ccxx_yield()</font>
00169 <font class="preprocessor"></font>
00170 <font class="preprocessor">#ifdef WIN32</font>
00171 <font class="preprocessor"></font>CCXX_EXPORT(DWORD) waitThread(HANDLE hRef, timeout_t timeout);
00172 <font class="preprocessor">#endif</font>
00173 <font class="preprocessor"></font>
00174 <font class="keyword">class </font>Conditional;
00175 <font class="keyword">class </font>CCXX_CLASS_EXPORT Event;
00176 
<a name="l00220"></a><a class="code" href="classost_1_1_mutex.html">00220</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT Mutex
00221 {
<a name="l00222"></a><a class="code" href="classost_1_1_mutex.html#l0">00222</a>         <font class="keyword">friend</font> <font class="keyword">class </font>Conditional;
<a name="l00223"></a><a class="code" href="classost_1_1_mutex.html#l1">00223</a>         <font class="keyword">friend</font> <font class="keyword">class </font>Event;
00224 <font class="keyword">private</font>:
00225 <font class="preprocessor">#ifndef WIN32</font>
00226 <font class="preprocessor"></font><font class="preprocessor">#ifndef PTHREAD_MUTEXTYPE_RECURSIVE</font>
00227 <font class="preprocessor"></font>        <font class="keyword">volatile</font> <font class="keywordtype">int</font> _level;
00228         <font class="keyword">volatile</font> Thread *_tid;
00229 <font class="preprocessor">#endif</font>
00230 <font class="preprocessor"></font>
00238         pthread_mutex_t _mutex;
00239 <font class="preprocessor">#else</font>
00240 <font class="preprocessor"></font>        HANDLE mutex;
00241 <font class="preprocessor">#endif</font>
00242 <font class="preprocessor"></font>
00243 <font class="keyword">public</font>:
00247         <a class="code" href="classost_1_1_mutex.html#a0">Mutex</a>();
00248 
00254         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_mutex.html#a1">~Mutex</a>();
00255 
00263         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_mutex.html#a2">EnterMutex</a>(<font class="keywordtype">void</font>);
00264 
00275         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_mutex.html#a3">TryEnterMutex</a>(<font class="keywordtype">void</font>);
00276 
00287         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_mutex.html#a4">LeaveMutex</a>(<font class="keywordtype">void</font>);
00288 };
00289 
<a name="l00311"></a><a class="code" href="classost_1_1_mutex_lock.html">00311</a> <font class="keyword">class </font>MutexLock
00312 {
00313 <font class="keyword">private</font>:
00314         Mutex&amp; mutex;
00315 <font class="keyword">public</font>:
<a name="l00319"></a><a class="code" href="classost_1_1_mutex_lock.html#a0">00319</a>         <a class="code" href="classost_1_1_mutex_lock.html#a0">MutexLock</a>( Mutex&amp; _mutex ) : mutex( _mutex ) 
00320                 { mutex.EnterMutex(); }
00324         <font class="comment">// this should be not-virtual</font>
<a name="l00325"></a><a class="code" href="classost_1_1_mutex_lock.html#a1">00325</a>         <a class="code" href="classost_1_1_mutex_lock.html#a1">~MutexLock</a>()<font class="keyword"></font>
00326 <font class="keyword">                </font>{ mutex.LeaveMutex(); }
00327 };
00328 
<a name="l00337"></a><a class="code" href="classost_1_1_thread_lock.html">00337</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT ThreadLock
00338 {
00339 <font class="keyword">private</font>:
00340 <font class="preprocessor">#ifdef HAVE_PTHREAD_RWLOCK</font>
00341 <font class="preprocessor"></font>        pthread_rwlock_t _lock;
00342 <font class="preprocessor">#else</font>
00343 <font class="preprocessor"></font>        Mutex mutex;
00344 <font class="preprocessor">#endif</font>
00345 <font class="preprocessor"></font>
00346 <font class="keyword">public</font>:
00350         <a class="code" href="classost_1_1_thread_lock.html#a0">ThreadLock</a>();
00351 
00355         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_thread_lock.html#a1">~ThreadLock</a>();
00356 
00360         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread_lock.html#a2">ReadLock</a>(<font class="keywordtype">void</font>);
00361 
00365         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread_lock.html#a3">WriteLock</a>(<font class="keywordtype">void</font>);
00366 
00372         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_thread_lock.html#a4">TryReadLock</a>(<font class="keywordtype">void</font>);
00373 
00379         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_thread_lock.html#a5">TryWriteLock</a>(<font class="keywordtype">void</font>);
00380 
00384         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread_lock.html#a6">Unlock</a>(<font class="keywordtype">void</font>);
00385 };
00386 
<a name="l00396"></a><a class="code" href="classost_1_1_mutex_counter.html">00396</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT MutexCounter : <font class="keyword">public</font> Mutex
00397 {
00398 <font class="keyword">private</font>:
00399         <font class="keywordtype">int</font>     counter;
00400 
00401 <font class="keyword">public</font>:
00402         <a class="code" href="classost_1_1_mutex_counter.html#a0">MutexCounter</a>();
00403         <a class="code" href="classost_1_1_mutex_counter.html#a0">MutexCounter</a>(<font class="keywordtype">int</font> initial);
00404 
00405         <font class="keyword">friend</font> CCXX_EXPORT(<font class="keywordtype">int</font>) <a class="code" href="classost_1_1_mutex_counter.html#l0">operator++</a>(MutexCounter &amp;mc);
00406         <font class="keyword">friend</font> CCXX_EXPORT(<font class="keywordtype">int</font>) <a class="code" href="classost_1_1_mutex_counter.html#l1">operator--</a>(MutexCounter &amp;mc);
00407 };
00408 
<a name="l00419"></a><a class="code" href="classost_1_1_atomic_counter.html">00419</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT AtomicCounter
00420 {
00421 <font class="preprocessor">#ifndef WIN32</font>
00422 <font class="preprocessor"></font><font class="keyword">private</font>:
00423 <font class="preprocessor">#ifdef  HAVE_ATOMIC</font>
00424 <font class="preprocessor"></font>        atomic_t atomic;
00425 <font class="preprocessor">#else</font>
00426 <font class="preprocessor"></font>        <font class="keywordtype">int</font> counter;
00427         Mutex lock;
00428 <font class="preprocessor">#endif</font>
00429 <font class="preprocessor"></font>
00430 <font class="keyword">public</font>:
00434         <a class="code" href="classost_1_1_atomic_counter.html#a0">AtomicCounter</a>();
00435 
00441         <a class="code" href="classost_1_1_atomic_counter.html#a0">AtomicCounter</a>(<font class="keywordtype">int</font> value);
00442 
00443         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a2">operator++</a>(<font class="keywordtype">void</font>);
00444         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a3">operator--</a>(<font class="keywordtype">void</font>);
00445         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a4">operator+=</a>(<font class="keywordtype">int</font> change);
00446         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a5">operator-=</a>(<font class="keywordtype">int</font> change);
00447         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a6">operator+</a>(<font class="keywordtype">int</font> change);
00448         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a7">operator-</a>(<font class="keywordtype">int</font> change);
00449         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a8">operator=</a>(<font class="keywordtype">int</font> value);
00450         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_atomic_counter.html#a9">operator!</a>(<font class="keywordtype">void</font>);
00451         <a class="code" href="classost_1_1_atomic_counter.html#a10">operator int</a>();
00452 <font class="preprocessor">#else</font>
00453 <font class="preprocessor"></font><font class="keyword">private</font>:
00454         <font class="keywordtype">long</font> atomic;
00455 
00456 <font class="keyword">public</font>:
00457         <font class="keyword">inline</font> <a class="code" href="classost_1_1_atomic_counter.html#a0">AtomicCounter</a>()<font class="keyword"></font>
00458 <font class="keyword">                </font>{atomic = 0;};
00459 
00460         <font class="keyword">inline</font> <a class="code" href="classost_1_1_atomic_counter.html#a0">AtomicCounter</a>(<font class="keywordtype">int</font> value)<font class="keyword"></font>
00461 <font class="keyword">                </font>{atomic = value;};
00462 
00463         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a2">operator++</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00464 <font class="keyword">                </font>{<font class="keywordflow">return</font> InterlockedIncrement(&amp;atomic);};
00465 
00466         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a3">operator--</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00467 <font class="keyword">                </font>{<font class="keywordflow">return</font> InterlockedDecrement(&amp;atomic);};
00468 
00469         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a4">operator+=</a>(<font class="keywordtype">int</font> change);
00470 
00471         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a5">operator-=</a>(<font class="keywordtype">int</font> change);
00472 
00473         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a6">operator+</a>(<font class="keywordtype">int</font> change)<font class="keyword"></font>
00474 <font class="keyword">                </font>{<font class="keywordflow">return</font> atomic + change;};
00475 
00476         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a7">operator-</a>(<font class="keywordtype">int</font> change)<font class="keyword"></font>
00477 <font class="keyword">                </font>{<font class="keywordflow">return</font> atomic - change;};
00478         
00479         <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_atomic_counter.html#a8">operator=</a>(<font class="keywordtype">int</font> value)<font class="keyword"></font>
00480 <font class="keyword">                </font>{<font class="keywordflow">return</font> InterlockedExchange(&amp;atomic, value);};
00481 
00482         <font class="keyword">inline</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_atomic_counter.html#a9">operator!</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00483 <font class="keyword">                </font>{<font class="keywordflow">return</font> (atomic == 0) ? <font class="keyword">true</font> : <font class="keyword">false</font>;};
00484 
00485         <font class="keyword">inline</font> <a class="code" href="classost_1_1_atomic_counter.html#a10">operator int</a>()<font class="keyword"></font>
00486 <font class="keyword">                </font>{<font class="keywordflow">return</font> atomic;};
00487 <font class="preprocessor">#endif</font>
00488 <font class="preprocessor"></font>};
00489 
00490 <font class="comment">// FIXME: implement Conditional class for win32</font>
00491 <font class="preprocessor">#ifndef WIN32</font>
00492 <font class="preprocessor"></font>
<a name="l00502"></a><a class="code" href="classost_1_1_conditional.html">00502</a> <font class="keyword">class </font>Conditional : <font class="keyword">public</font> Mutex
00503 {
00504 <font class="keyword">private</font>:
00505         pthread_cond_t _cond;
00506 
00507 <font class="keyword">public</font>:
00511         <a class="code" href="classost_1_1_conditional.html#a0">Conditional</a>();
00512 
00516         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_conditional.html#a1">~Conditional</a>();
00517 
00523         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_conditional.html#a2">Signal</a>(<font class="keywordtype">bool</font> broadcast);
00524 
00528         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_conditional.html#a3">Wait</a>(timeout_t timer = 0); 
00529 };
00530 <font class="preprocessor">#endif</font>
00531 <font class="preprocessor"></font>
<a name="l00549"></a><a class="code" href="classost_1_1_semaphore.html">00549</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT Semaphore
00550 {
00551 <font class="keyword">private</font>:
00552 <font class="preprocessor">#ifndef WIN32</font>
00553 <font class="preprocessor"></font><font class="preprocessor">#ifdef  CCXX_SYSV_SEMAPHORES</font>
00554 <font class="preprocessor"></font>        <font class="keywordtype">int</font> _semaphore;
00555 <font class="preprocessor">#else</font>
00556 <font class="preprocessor"></font>        sem_t _semaphore;
00557 <font class="preprocessor">#endif</font>
00558 <font class="preprocessor"></font><font class="preprocessor">#else // WIN32</font>
00559 <font class="preprocessor"></font>        HANDLE  semObject;
00560 <font class="preprocessor">#endif // !WIN32</font>
00561 <font class="preprocessor"></font>
00562 <font class="keyword">public</font>:
00571         <a class="code" href="classost_1_1_semaphore.html#a0">Semaphore</a>(size_t resource = 0);
00572 
00579         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_semaphore.html#a1">~Semaphore</a>();
00580 
00594         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_semaphore.html#a2">Wait</a>(<font class="keywordtype">void</font>);
00595 
00607         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_semaphore.html#a3">TryWait</a>(<font class="keywordtype">void</font>);
00608 
00620         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_semaphore.html#a4">Post</a>(<font class="keywordtype">void</font>);
00621 
00622         <font class="comment">// FIXME: how implement getValue for posix compatibility ?</font>
00628 <font class="comment"></font><font class="preprocessor">#ifndef WIN32</font>
00629 <font class="preprocessor"></font><font class="preprocessor">#ifndef __CYGWIN32__</font>
00630 <font class="preprocessor"></font>        <font class="keywordtype">int</font> <a class="code" href="classost_1_1_semaphore.html#a5">getValue</a>(<font class="keywordtype">void</font>);
00631 <font class="preprocessor">#endif</font>
00632 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
00633 <font class="preprocessor"></font>};
00634 
<a name="l00648"></a><a class="code" href="classost_1_1_event.html">00648</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT Event
00649 {
00650 <font class="keyword">private</font>:
00651 <font class="preprocessor">#ifndef WIN32</font>
00652 <font class="preprocessor"></font>        Mutex mutex;
00653         pthread_cond_t _cond;
00654         <font class="keywordtype">bool</font> _signaled;
00655         <font class="keywordtype">int</font> _count;
00656 <font class="preprocessor">#else</font>
00657 <font class="preprocessor"></font>        HANDLE cond;
00658 <font class="preprocessor">#endif</font>
00659 <font class="preprocessor"></font>
00660 <font class="keyword">public</font>:
00661         <a class="code" href="classost_1_1_event.html#a0">Event</a>();
00662 
00663         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_event.html#a1">~Event</a>();
00664 
00671         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_event.html#a2">Reset</a>(<font class="keywordtype">void</font>);
00672 
00676         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_event.html#a3">Signal</a>(<font class="keywordtype">void</font>);
00677 
00686         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_event.html#a5">Wait</a>(timeout_t timer);
00687         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_event.html#a5">Wait</a>(<font class="keywordtype">void</font>);
00688 };
00689 
<a name="l00711"></a><a class="code" href="classost_1_1_buffer.html">00711</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT Buffer
00712 {
00713 <font class="keyword">private</font>:
00714         Mutex lock_head, lock_tail;
00715         Semaphore size_head, size_tail;
00716         size_t _size;
00717         size_t _used;
00718 
00719 <font class="keyword">protected</font>:
00725         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#b0">OnPeek</a>(<font class="keywordtype">void</font> *buf) = 0;
00731         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#b1">OnWait</a>(<font class="keywordtype">void</font> *buf) = 0;
00737         <font class="keyword">virtual</font> <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#b2">OnPost</a>(<font class="keywordtype">void</font> *buf) = 0;
00738 
00739 <font class="keyword">public</font>:
00744         <a class="code" href="classost_1_1_buffer.html#a0">Buffer</a>(size_t capacity);
<a name="l00749"></a><a class="code" href="classost_1_1_buffer.html#a1">00749</a>         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_buffer.html#a1">~Buffer</a>()<font class="keyword"></font>
00750 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
00751 
<a name="l00756"></a><a class="code" href="classost_1_1_buffer.html#a2">00756</a>         <font class="keyword">inline</font> size_t <a class="code" href="classost_1_1_buffer.html#a2">getSize</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00757 <font class="keyword">                </font>{<font class="keywordflow">return</font> _size;};
00758         
<a name="l00765"></a><a class="code" href="classost_1_1_buffer.html#a3">00765</a>         <font class="keyword">inline</font> size_t <a class="code" href="classost_1_1_buffer.html#a3">getUsed</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00766 <font class="keyword">                </font>{<font class="keywordflow">return</font> _used;};
00767 
00776         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#a4">Wait</a>(<font class="keywordtype">void</font> *buf);
00777 
00785         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#a5">Post</a>(<font class="keywordtype">void</font> *buf);
00786 
00793         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_buffer.html#a6">Peek</a>(<font class="keywordtype">void</font> *buf);
00794 
<a name="l00799"></a><a class="code" href="classost_1_1_buffer.html#a7">00799</a>         <font class="keyword">virtual</font> <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_buffer.html#a7">isValid</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
00800 <font class="keyword">                </font>{<font class="keywordflow">return</font> <font class="keyword">true</font>;};
00801 };
00802 
<a name="l00810"></a><a class="code" href="classost_1_1_fixed_buffer.html">00810</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT FixedBuffer : <font class="keyword">public</font> Buffer
00811 {
00812 <font class="keyword">private</font>:
00813         <font class="keywordtype">char</font> *buf, *head, *tail;
00814         size_t objsize;
00815 
00816 <font class="keyword">protected</font>:
00822         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_fixed_buffer.html#b0">OnPeek</a>(<font class="keywordtype">void</font> *buf);
00823 
00829         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_fixed_buffer.html#b1">OnWait</a>(<font class="keywordtype">void</font> *buf);
00830 
00836         <font class="keywordtype">int</font> <a class="code" href="classost_1_1_fixed_buffer.html#b2">OnPost</a>(<font class="keywordtype">void</font> *buf);  
00837 
00838 <font class="keyword">public</font>:
00846         <a class="code" href="classost_1_1_fixed_buffer.html#a0">FixedBuffer</a>(size_t capacity, size_t objsize);
00847 
00854         <a class="code" href="classost_1_1_fixed_buffer.html#a0">FixedBuffer</a>(<font class="keyword">const</font> FixedBuffer &amp;fb);
00855 
00859         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_fixed_buffer.html#a2">~FixedBuffer</a>();
00860 
00861         FixedBuffer &amp;<a class="code" href="classost_1_1_fixed_buffer.html#a3">operator=</a>(<font class="keyword">const</font> FixedBuffer &amp;fb);
00862 
00863         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_fixed_buffer.html#a4">isValid</a>(<font class="keywordtype">void</font>);
00864 };
00865 
<a name="l01013"></a><a class="code" href="classost_1_1_thread.html">01013</a> <font class="keyword">class </font>Thread
01014 {
01015 <font class="preprocessor">#ifndef WIN32</font>
<a name="l01016"></a><a class="code" href="classost_1_1_thread.html#l0">01016</a> <font class="preprocessor"></font><font class="keyword">friend</font> <font class="keyword">class </font>PosixThread;
01017 <font class="keyword">friend</font> RETSIGTYPE <a class="code" href="classost_1_1_thread.html#l2">ccxx_sigsuspend</a>(<font class="keywordtype">int</font>);
01018 <font class="preprocessor">#endif</font>
01019 <font class="preprocessor"></font><font class="keyword">private</font>:
<a name="l01020"></a><a class="code" href="classost_1_1_thread.html#l1">01020</a>         <font class="keyword">friend</font> <font class="keyword">class </font>Slog;
01021 
01022         <font class="keyword">static</font> Thread *_main;
01023 
01024         Thread *_parent;
01025 <font class="preprocessor">#ifndef WIN32</font>
01026 <font class="preprocessor"></font>        pthread_t _tid;
01027         pthread_attr_t _attr;
01028         AtomicCounter _suspendcount;
01029 <font class="preprocessor">#else</font>
01030 <font class="preprocessor"></font>        DWORD _tid;
01031         HANDLE _cancellation;
01032 <font class="preprocessor">#endif</font>
01033 <font class="preprocessor"></font>        thread_cancel_t _cancel;
01034         jmp_buf _env;
01035         Semaphore *_start;
01036         <font class="keywordtype">int</font> _msgpos;
01037         <font class="keywordtype">char</font> _msgbuf[128];
01038         throw_t _throw;
01039 
01040 <font class="preprocessor">#ifndef WIN32</font>
01041 <font class="preprocessor"></font>        <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#l3">execHandler</a>(Thread *th);
01042         <font class="keyword">friend</font> Thread *<a class="code" href="classost_1_1_thread.html#l4">getThread</a>(<font class="keywordtype">void</font>);
01043 <font class="preprocessor">#else</font>
01044 <font class="preprocessor"></font>        <font class="keywordtype">bool</font> _active:1;
01045         <font class="keywordtype">bool</font> _suspendEnable:1;
01046         <font class="keyword">static</font> <font class="keywordtype">unsigned</font> __stdcall Execute(Thread *th);
01047         HANDLE  _hThread;
01048 <font class="preprocessor">#endif</font>
01049 <font class="preprocessor"></font>
01050 <font class="keyword">protected</font>:
01060         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#b0">Run</a>(<font class="keywordtype">void</font>) = 0;
01061 
<a name="l01074"></a><a class="code" href="classost_1_1_thread.html#b1">01074</a>         CCXX_MEMBER_EXPORT(<font class="keyword">virtual</font> <font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b1">Final</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01075 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01076 
<a name="l01087"></a><a class="code" href="classost_1_1_thread.html#b2">01087</a>         CCXX_MEMBER_EXPORT(<font class="keyword">virtual</font> <font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b2">Initial</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01088 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01089 
<a name="l01099"></a><a class="code" href="classost_1_1_thread.html#b3">01099</a>         CCXX_MEMBER_EXPORT(<font class="keyword">virtual</font> <font class="keywordtype">void</font>*) <a class="code" href="classost_1_1_thread.html#b3">getExtended</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01100 <font class="keyword">                </font>{<font class="keywordflow">return</font> NULL;};
01101 
<a name="l01109"></a><a class="code" href="classost_1_1_thread.html#b4">01109</a>         CCXX_MEMBER_EXPORT(<font class="keyword">virtual</font> <font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b4">Notify</a>(Thread *th)<font class="keyword"></font>
01110 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01111 
<a name="l01121"></a><a class="code" href="classost_1_1_thread.html#b5">01121</a>         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b5">Sleep</a>(timeout_t msec)
01122 <font class="preprocessor">#ifndef WIN32</font>
01123 <font class="preprocessor"></font>                {<a class="code" href="classost_1_1_thread.html#l9">ccxx_sleep</a>(msec);}
01124 <font class="preprocessor">#endif</font>
01125 <font class="preprocessor"></font>        ;
01126 
01127         <font class="comment">// FIXME: _env can not initialized</font>
<a name="l01133"></a><a class="code" href="classost_1_1_thread.html#b6">01133</a> <font class="comment"></font>        <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#b6">Exit</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01134 <font class="keyword">                </font>{longjmp(_env, 1);};
01135 
01140         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b7">Yield</a>(<font class="keywordtype">void</font>);
01141 
01145         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b8">testCancel</a>(<font class="keywordtype">void</font>);
01146 
01155         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b9">setCancel</a>(thread_cancel_t mode);
01156 
01164         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b10">setSuspend</a>(thread_suspend_t mode);
01165 
01174         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#b11">Terminate</a>(<font class="keywordtype">void</font>);
01175 
<a name="l01179"></a><a class="code" href="classost_1_1_thread.html#b12">01179</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#b12">clrParent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01180 <font class="keyword">                </font>{_parent = NULL;};
01181 
01182 <font class="preprocessor">#ifdef WIN32</font>
01183 <font class="preprocessor"></font>        <font class="comment">// FIXME: should be private</font>
01184         CCXX_MEMBER_EXPORT(DWORD) WaitHandle(HANDLE obj, timeout_t timeout);
01185 <font class="preprocessor">#endif</font>
01186 <font class="preprocessor"></font>
01187 <font class="keyword">public</font>:
01196         CCXX_MEMBER_EXPORT(CCXX_EMPTY) <a class="code" href="classost_1_1_thread.html#a0">Thread</a>(<font class="keywordtype">bool</font> isMain);
01197 
01210         CCXX_MEMBER_EXPORT(CCXX_EMPTY) <a class="code" href="classost_1_1_thread.html#a0">Thread</a>(<font class="keywordtype">int</font> pri = 0, size_t stack = 0);
01211 
01212         <font class="comment">// FIXME: win32 lack copy constructor</font>
01213 <font class="preprocessor">#ifndef WIN32</font>
01214 <font class="preprocessor"></font>
01221         <a class="code" href="classost_1_1_thread.html#a0">Thread</a>(<font class="keyword">const</font> Thread &amp;th);
01222 <font class="preprocessor">#endif</font>
01223 <font class="preprocessor"></font>
<a name="l01230"></a><a class="code" href="classost_1_1_thread.html#a3">01230</a>         CCXX_MEMBER_EXPORT(<font class="keyword">virtual</font>) <a class="code" href="classost_1_1_thread.html#a3">~Thread</a>()<font class="keyword"></font>
01231 <font class="keyword">                </font>{<a class="code" href="classost_1_1_thread.html#b11">Terminate</a>();};
01232 
01245         CCXX_MEMBER_EXPORT(<font class="keywordtype">int</font>) <a class="code" href="classost_1_1_thread.html#a4">Start</a>(Semaphore *start = 0);
01246 
01255         CCXX_MEMBER_EXPORT(<font class="keywordtype">int</font>) <a class="code" href="classost_1_1_thread.html#a5">Detach</a>(Semaphore *start = 0);
01256 
<a name="l01263"></a><a class="code" href="classost_1_1_thread.html#a6">01263</a>         <font class="keyword">inline</font> Thread *<a class="code" href="classost_1_1_thread.html#a6">getParent</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01264 <font class="keyword">                </font>{<font class="keywordflow">return</font> _parent;};
01265 
01272         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#a7">Suspend</a>(<font class="keywordtype">void</font>);
01273 
01277         CCXX_MEMBER_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#a8">Resume</a>(<font class="keywordtype">void</font>);
01278 
<a name="l01285"></a><a class="code" href="classost_1_1_thread.html#a9">01285</a>         <font class="keyword">inline</font> thread_cancel_t <a class="code" href="classost_1_1_thread.html#a9">getCancel</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01286 <font class="keyword">                </font>{<font class="keywordflow">return</font> _cancel;};
01287 
01294         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_thread.html#a10">isRunning</a>(<font class="keywordtype">void</font>)
01295 <font class="preprocessor">#ifdef WIN32</font>
01296 <font class="preprocessor"></font>                {<font class="keywordflow">return</font> (_tid != 0) ? <font class="keyword">true</font> : <font class="keyword">false</font>;}
01297 <font class="preprocessor">#endif</font>
01298 <font class="preprocessor"></font>        ;
01299 
01306         <font class="keywordtype">bool</font> <a class="code" href="classost_1_1_thread.html#a11">isThread</a>(<font class="keywordtype">void</font>)
01307 <font class="preprocessor">#ifdef WIN32</font>
01308 <font class="preprocessor"></font>                {<font class="keywordflow">return</font> ((_tid == GetCurrentThreadId())) ? <font class="keyword">true</font> : <font class="keyword">false</font>;}
01309 <font class="preprocessor">#endif</font>
01310 <font class="preprocessor"></font>        ;
01311 
01317         <font class="keyword">friend</font> CCXX_EXPORT(throw_t) <a class="code" href="classost_1_1_thread.html#l5">getException</a>(<font class="keywordtype">void</font>);
01318 
01324         <font class="keyword">friend</font> CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#l6">setException</a>(throw_t mode);
01325 
01326         <font class="comment">// FIXME: _start can be NULL</font>
<a name="l01333"></a><a class="code" href="classost_1_1_thread.html#l7">01333</a> <font class="comment"></font>        <font class="keyword">friend</font> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#l7">operator++</a>(Thread &amp;th)<font class="keyword"></font>
01334 <font class="keyword">                </font>{th._start-&gt;Post();};
01335 
<a name="l01336"></a><a class="code" href="classost_1_1_thread.html#l8">01336</a>         <font class="keyword">friend</font> <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread.html#l8">operator--</a>(Thread &amp;th)<font class="keyword"></font>
01337 <font class="keyword">                </font>{th._start-&gt;Wait();};
01338 
01344         <font class="keyword">friend</font> CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#l9">ccxx_sleep</a>(timeout_t msec);
01345 
01349         <font class="keyword">friend</font> CCXX_EXPORT(<font class="keywordtype">void</font>) <a class="code" href="classost_1_1_thread.html#l10">ccxx_yield</a>(<font class="keywordtype">void</font>);
01350 
01351 <font class="preprocessor">#ifdef WIN32</font>
01352 <font class="preprocessor"></font>        <font class="comment">// FIXME: not defined in posix</font>
01353         <font class="keyword">inline</font> <font class="keywordtype">bool</font> isCancelled(<font class="keywordtype">void</font>)<font class="keyword"></font>
01354 <font class="keyword">                </font>{<font class="keywordflow">return</font> waitThread(_cancellation, 0) == WAIT_OBJECT_0; };
01355 
01356         <font class="keyword">inline</font> <font class="keywordtype">bool</font> isCancelled(timeout_t timer)<font class="keyword"></font>
01357 <font class="keyword">                </font>{<font class="keywordflow">return</font> waitThread(_cancellation, timer) == WAIT_OBJECT_0; };
01358                 
01359         <font class="keyword">friend</font> CCXX_EXPORT(DWORD) waitThread(HANDLE hRef, timeout_t timeout);
01360 <font class="preprocessor">#endif</font>
01361 <font class="preprocessor"></font>};
01362 
01363 <font class="preprocessor">#if !defined(WIN32) &amp;&amp; !defined(__CYGWIN32__)  &amp;&amp; !defined(__MINGW32__)</font>
01364 <font class="preprocessor"></font><font class="keyword">extern</font> <font class="stringliteral">"C"</font> <font class="keywordtype">void</font> <a class="code" href="namespaceost.html#a224">sigHandler</a>(<font class="keywordtype">int</font> signo);
01365 
<a name="l01366"></a><a class="code" href="namespaceost.html#a141">01366</a> <font class="keyword">typedef</font> <font class="keywordtype">int</font>             signo_t;
01367 
<a name="l01368"></a><a class="code" href="classost_1_1_posix_thread.html">01368</a> <font class="keyword">class </font>PosixThread: <font class="keyword">public</font> Thread
01369 {
01370 <font class="keyword">private</font>:
01371 <font class="preprocessor">#ifndef WIN32</font>
01372 <font class="preprocessor"></font>        <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#l0">execHandler</a>(Thread *th);
01373 <font class="preprocessor">#endif</font>
01374 <font class="preprocessor"></font><font class="preprocessor">#ifndef CCXX_SIG_THREAD_ALARM</font>
01375 <font class="preprocessor"></font>        <font class="keyword">static</font> PosixThread *_timer;
01376         <font class="keyword">static</font> Mutex _arm;
01377 <font class="preprocessor">#endif</font>
01378 <font class="preprocessor"></font>        
01379         time_t  _alarm;
01380         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#l1">sigHandler</a>(<font class="keywordtype">int</font> signo);
01381         <font class="keyword">inline</font> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#a0">SignalThread</a>(Thread* th,signo_t signo)<font class="keyword"></font>
01382 <font class="keyword">                </font>{pthread_kill(th-&gt;_tid, signo);};
01383 <font class="keyword">protected</font>:
01384                 
<a name="l01391"></a><a class="code" href="classost_1_1_posix_thread.html#b0">01391</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b0">SignalParent</a>(signo_t signo)<font class="keyword"></font>
01392 <font class="keyword">                </font>{ <a class="code" href="classost_1_1_posix_thread.html#a0">SignalThread</a>(_parent,signo); };
01393         
<a name="l01400"></a><a class="code" href="classost_1_1_posix_thread.html#b1">01400</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b1">SignalMain</a>(signo_t signo)<font class="keyword"></font>
01401 <font class="keyword">                </font>{ <a class="code" href="classost_1_1_posix_thread.html#a0">SignalThread</a>(_main,signo);};
01402 
<a name="l01407"></a><a class="code" href="classost_1_1_posix_thread.html#b2">01407</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b2">OnTimer</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01408 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01409 
<a name="l01414"></a><a class="code" href="classost_1_1_posix_thread.html#b3">01414</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b3">OnHangup</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01415 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01416 
<a name="l01421"></a><a class="code" href="classost_1_1_posix_thread.html#b4">01421</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b4">OnException</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01422 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01423 
<a name="l01428"></a><a class="code" href="classost_1_1_posix_thread.html#b5">01428</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b5">OnDisconnect</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01429 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01430 
<a name="l01435"></a><a class="code" href="classost_1_1_posix_thread.html#b6">01435</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b6">OnPolling</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01436 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01437 
<a name="l01444"></a><a class="code" href="classost_1_1_posix_thread.html#b7">01444</a>         <font class="keyword">virtual</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b7">OnSignal</a>(<font class="keywordtype">int</font> signo)<font class="keyword"></font>
01445 <font class="keyword">                </font>{<font class="keywordflow">return</font>;};
01446         
01456         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b8">setTimer</a>(timeout_t timer);
01457         
01464         timeout_t <a class="code" href="classost_1_1_posix_thread.html#b9">getTimer</a>(<font class="keywordtype">void</font>);
01465         
01471         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b10">endTimer</a>(<font class="keywordtype">void</font>);
01472         
01479         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b11">WaitSignal</a>(signo_t signo);
01480         
01487         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#b12">setSignal</a>(<font class="keywordtype">int</font> signo, <font class="keywordtype">bool</font> mode);
01488 <font class="keyword">public</font>:
01489         
<a name="l01495"></a><a class="code" href="classost_1_1_posix_thread.html#a0">01495</a>         <font class="keyword">inline</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#a0">SignalThread</a>(<font class="keywordtype">int</font> signo)<font class="keyword"></font>
01496 <font class="keyword">                </font>{<a class="code" href="classost_1_1_posix_thread.html#a0">SignalThread</a>(<font class="keyword">this</font>, signo);};
01497 
01504         <font class="keyword">friend</font> <font class="keywordtype">void</font> <a class="code" href="classost_1_1_posix_thread.html#l2">siginstall</a>(<font class="keywordtype">int</font> signo);
01505 };
01506 <font class="preprocessor">#endif</font>
01507 <font class="preprocessor"></font>
<a name="l01522"></a><a class="code" href="classost_1_1_thread_key.html">01522</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT ThreadKey
01523 {
01524 <font class="keyword">private</font>:
01525 <font class="preprocessor">#ifndef WIN32</font>
01526 <font class="preprocessor"></font>        pthread_key_t key;
01527 <font class="preprocessor">#else</font>
01528 <font class="preprocessor"></font>        DWORD   key;
01529 <font class="preprocessor">#endif</font>
01530 <font class="preprocessor"></font>
01531 <font class="keyword">public</font>:
01535         <a class="code" href="classost_1_1_thread_key.html#a0">ThreadKey</a>();
01539         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_thread_key.html#a1">~ThreadKey</a>();
01547         <font class="keywordtype">void</font> *<a class="code" href="classost_1_1_thread_key.html#a2">getKey</a>(<font class="keywordtype">void</font>);
01555         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_thread_key.html#a3">setKey</a>(<font class="keywordtype">void</font> *);
01556 };
01557 
<a name="l01568"></a><a class="code" href="classost_1_1_timer_port.html">01568</a> <font class="keyword">class </font>CCXX_CLASS_EXPORT TimerPort
01569 {
01570 <font class="preprocessor">#ifndef WIN32</font>
01571 <font class="preprocessor"></font>        <font class="keyword">struct </font>timeval timer;
01572 <font class="preprocessor">#else</font>
01573 <font class="preprocessor"></font>        DWORD timer;
01574 <font class="preprocessor">#endif</font>
01575 <font class="preprocessor"></font>        <font class="keywordtype">bool</font> active;
01576 
01577 <font class="keyword">public</font>:
01584         <a class="code" href="classost_1_1_timer_port.html#a0">TimerPort</a>();
01585 
01594         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_timer_port.html#a1">setTimer</a>(timeout_t timeout = 0);
01595 
01605         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_timer_port.html#a2">incTimer</a>(timeout_t timeout);
01606 
01612         <font class="keywordtype">void</font> <a class="code" href="classost_1_1_timer_port.html#a3">endTimer</a>(<font class="keywordtype">void</font>);
01613 
01624         timeout_t <a class="code" href="classost_1_1_timer_port.html#a4">getTimer</a>(<font class="keywordtype">void</font>);
01625 
01634         timeout_t <a class="code" href="classost_1_1_timer_port.html#a5">getElapsed</a>(<font class="keywordtype">void</font>);
01635 };
01636 
<a name="l01637"></a><a class="code" href="namespaceost.html#a225">01637</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="namespaceost.html#a225">get</a>(Buffer &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01638 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.Wait(o);};
01639 
<a name="l01640"></a><a class="code" href="namespaceost.html#a226">01640</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="namespaceost.html#a226">put</a>(Buffer &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01641 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.Post(o);};
01642 
<a name="l01643"></a><a class="code" href="namespaceost.html#a227">01643</a> <font class="keyword">inline</font> <font class="keywordtype">int</font> <a class="code" href="namespaceost.html#a227">peek</a>(Buffer &amp;b, <font class="keywordtype">void</font> *o)<font class="keyword"></font>
01644 <font class="keyword">        </font>{<font class="keywordflow">return</font> b.Peek(o);};
01645 
01646 
01647 <font class="comment">// FIXME: not in win32 implementation</font>
01648 <font class="preprocessor">#if !defined(WIN32)</font>
01649 <font class="preprocessor"></font>
01650 <font class="comment">// FIXME: private declaration ???</font>
01651 <font class="keyword">struct  </font>timespec *gettimeout(struct timespec *spec, timeout_t timeout); 
01652 
01653 <font class="preprocessor">#if !defined(__CYGWIN32__) &amp;&amp; !defined(__MINGW32__)</font>
01654 <font class="preprocessor"></font><font class="keywordtype">void</font>    <a class="code" href="namespaceost.html#a229">wait</a>(signo_t signo);
01655 <font class="preprocessor">#endif</font>
01656 <font class="preprocessor"></font>
01665 <font class="keywordtype">void</font>    <a class="code" href="namespaceost.html#a230">pdetach</a>(<font class="keywordtype">void</font>);
01666 <font class="preprocessor">#endif // !WIN32</font>
01667 <font class="preprocessor"></font>
01668 <font class="comment">// FIXME: no way to implement in win32</font>
01669 <font class="preprocessor">#ifndef WIN32</font>
01670 <font class="preprocessor"></font><font class="preprocessor">#if defined(HAVE_POLL_H) || defined(HAVE_SYS_POLL_H)</font>
01671 <font class="preprocessor"></font><font class="preprocessor">#if defined(HAVE_SYS_STREAM_H)</font>
01672 <font class="preprocessor"></font><font class="preprocessor">#if defined(__linux__)</font>
01673 <font class="preprocessor"></font><font class="preprocessor">#define CCXX_USE_POLL 1</font>
01674 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01675 <font class="preprocessor"></font><font class="preprocessor">#else</font>
<a name="l01676"></a><a class="code" href="thread_8h.html#a9">01676</a> <font class="preprocessor"></font><font class="preprocessor">#define CCXX_USE_POLL 1</font>
01677 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01678 <font class="preprocessor"></font><font class="preprocessor">#endif</font>
01679 <font class="preprocessor"></font>
01680 <font class="preprocessor">#ifdef CCXX_USE_POLL</font>
01681 <font class="preprocessor"></font>
<a name="l01689"></a><a class="code" href="classost_1_1_poller.html">01689</a> <font class="keyword">class </font>Poller 
01690 {
01691 <font class="keyword">private</font>:
01692         <font class="keywordtype">int</font> nufds;
01693         pollfd *ufds;
01694 
01695 <font class="keyword">public</font>:
01696         <a class="code" href="classost_1_1_poller.html#a0">Poller</a>();
01697 
01698         <font class="keyword">virtual</font> <a class="code" href="classost_1_1_poller.html#a1">~Poller</a>();
01699 
01707         pollfd *<a class="code" href="classost_1_1_poller.html#a3">getList</a>(<font class="keywordtype">int</font> cnt);
01708 
<a name="l01714"></a><a class="code" href="classost_1_1_poller.html#a3">01714</a>         <font class="keyword">inline</font>  pollfd *<a class="code" href="classost_1_1_poller.html#a3">getList</a>(<font class="keywordtype">void</font>)<font class="keyword"></font>
01715 <font class="keyword">                </font>{<font class="keywordflow">return</font> ufds;};
01716 };
01717 <font class="preprocessor">#endif</font>
01718 <font class="preprocessor"></font><font class="preprocessor">#endif // !WIN32</font>
01719 <font class="preprocessor"></font>
01720 <font class="preprocessor">#ifdef  COMMON_STD_EXCEPTION</font>
01721 <font class="preprocessor"></font>
01727 <font class="keyword">class </font>ThrException : <font class="keyword">public</font> Exception
01728 {
01729 <font class="keyword">public</font>:
01730         ThrException(<font class="keyword">const</font> std::string &amp;what_arg) : Exception(what_arg) {};
01731 };
01732 
01739 <font class="keyword">class </font>SyncException : <font class="keyword">public</font> ThrException
01740 {
01741 <font class="keyword">public</font>:
01742         SyncException(<font class="keyword">const</font> std::string &amp;what_arg) : ThrException(what_arg) {};
01743 };
01744 <font class="preprocessor">#endif</font>
01745 <font class="preprocessor"></font>
01746 <font class="preprocessor">#ifdef  CCXX_NAMESPACES</font>
01747 <font class="preprocessor"></font>};
01748 <font class="preprocessor">#endif</font>
01749 <font class="preprocessor"></font>
01750 <font class="preprocessor">#endif</font>
01751 <font class="preprocessor"></font>
</pre></div><hr><address><small>Generated at Fri Jan 4 18:51:46 2002 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.10 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>,
 &copy;&nbsp;1997-2001</small></address>
</body>
</html>