<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.5"/> <title>GNU CommonC++: thread.h Source File</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">GNU CommonC++ </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.5 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> <li><a href="examples.html"><span>Examples</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_bfccd401955b95cf8c75461437045ac0.html">inc</a></li><li class="navelem"><a class="el" href="dir_6b3e09e31d3da6038137f0238e9fb19b.html">cc++</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="headertitle"> <div class="title">thread.h</div> </div> </div><!--header--> <div class="contents"> <a href="thread_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="comment">// Copyright (C) 1999-2005 Open Source Telecom Corporation.</span></div> <div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment">// Copyright (C) 2006-2010 David Sugar, Tycho Softworks.</span></div> <div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment">//</span></div> <div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment">// This program is free software; you can redistribute it and/or modify</span></div> <div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment">// it under the terms of the GNU General Public License as published by</span></div> <div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment">// the Free Software Foundation; either version 2 of the License, or</span></div> <div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="comment">// (at your option) any later version.</span></div> <div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="comment">//</span></div> <div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="comment">// This program is distributed in the hope that it will be useful,</span></div> <div class="line"><a name="l00010"></a><span class="lineno"> 10</span> <span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div> <div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div> <div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">// GNU General Public License for more details.</span></div> <div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">//</span></div> <div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// You should have received a copy of the GNU General Public License</span></div> <div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">// along with this program; if not, write to the Free Software</span></div> <div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span></div> <div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">//</span></div> <div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">// As a special exception, you may use this file as part of a free software</span></div> <div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">// library without restriction. Specifically, if other files instantiate</span></div> <div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">// templates or use macros or inline functions from this file, or you compile</span></div> <div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// this file and link it with other files to produce an executable, this</span></div> <div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// file does not by itself cause the resulting executable to be covered by</span></div> <div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// the GNU General Public License. This exception does not however</span></div> <div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">// invalidate any other reasons why the executable file might be covered by</span></div> <div class="line"><a name="l00025"></a><span class="lineno"> 25</span> <span class="comment">// the GNU General Public License.</span></div> <div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="comment">//</span></div> <div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="comment">// This exception applies only to the code released under the name GNU</span></div> <div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="comment">// Common C++. If you copy code from other releases into a copy of GNU</span></div> <div class="line"><a name="l00029"></a><span class="lineno"> 29</span> <span class="comment">// Common C++, as the General Public License permits, the exception does</span></div> <div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">// not apply to the code that you add in this way. To avoid misleading</span></div> <div class="line"><a name="l00031"></a><span class="lineno"> 31</span> <span class="comment">// anyone as to the status of such modified files, you must delete</span></div> <div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// this exception notice from them.</span></div> <div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">//</span></div> <div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// If you write modifications of your own for GNU Common C++, it is your choice</span></div> <div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// whether to permit this exception to apply to your modifications.</span></div> <div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// If you do not wish that, delete this exception notice.</span></div> <div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="comment">//</span></div> <div class="line"><a name="l00038"></a><span class="lineno"> 38</span> </div> <div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="preprocessor">#ifndef CCXX_THREAD_H_</span></div> <div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor"></span><span class="preprocessor">#define CCXX_THREAD_H_</span></div> <div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#include <<a class="code" href="config_8h.html">cc++/config.h</a>></span></div> <div class="line"><a name="l00048"></a><span class="lineno"> 48</span> </div> <div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="preprocessor">#ifndef CCXX_STRING_H_</span></div> <div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="preprocessor"></span><span class="preprocessor">#include <<a class="code" href="string_8h.html">cc++/string.h</a>></span></div> <div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00054"></a><span class="lineno"><a class="line" href="thread_8h.html#a9fc514088fa3739a1300ce30ca6585d5"> 54</a></span> <span class="preprocessor"></span><span class="preprocessor">#define CCXX_POSIX</span></div> <div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor"></span><span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l00056"></a><span class="lineno"> 56</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#include <ctime></span></div> <div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div> <div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00060"></a><span class="lineno"> 60</span> <span class="preprocessor"></span><span class="preprocessor">#include <pthread.h></span></div> <div class="line"><a name="l00061"></a><span class="lineno"> 61</span> <span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l00062"></a><span class="lineno"> 62</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00063"></a><span class="lineno"> 63</span> <span class="preprocessor">#undef CCXX_USE_WIN32_ATOMIC</span></div> <div class="line"><a name="l00064"></a><span class="lineno"> 64</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="preprocessor"></span><span class="preprocessor">#include <time.h></span></div> <div class="line"><a name="l00066"></a><span class="lineno"> 66</span> <span class="preprocessor">#include <signal.h></span></div> <div class="line"><a name="l00067"></a><span class="lineno"> 67</span> <span class="preprocessor">#include <unistd.h></span></div> <div class="line"><a name="l00068"></a><span class="lineno"> 68</span> </div> <div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="preprocessor">#ifdef _THR_UNIXWARE</span></div> <div class="line"><a name="l00070"></a><span class="lineno"> 70</span> <span class="preprocessor"></span><span class="preprocessor">#undef PTHREAD_MUTEXTYPE_RECURSIVE</span></div> <div class="line"><a name="l00071"></a><span class="lineno"> 71</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> <div class="line"><a name="l00072"></a><span class="lineno"> 72</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00073"></a><span class="lineno"><a class="line" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6"> 73</a></span> <span class="keyword">typedef</span> pthread_t <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a>;</div> <div class="line"><a name="l00074"></a><span class="lineno"><a class="line" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c"> 74</a></span> <span class="keyword">typedef</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>;</div> <div class="line"><a name="l00075"></a><span class="lineno"> 75</span> </div> <div class="line"><a name="l00076"></a><span class="lineno"> 76</span> <span class="comment">/*</span></div> <div class="line"><a name="l00077"></a><span class="lineno"> 77</span> <span class="comment">#if defined(__CYGWIN32__)</span></div> <div class="line"><a name="l00078"></a><span class="lineno"> 78</span> <span class="comment">__declspec(dllimport) long __stdcall InterlockedIncrement(long *);</span></div> <div class="line"><a name="l00079"></a><span class="lineno"> 79</span> <span class="comment">__declspec(dllimport) long __stdcall InterlockedDecrement(long *);</span></div> <div class="line"><a name="l00080"></a><span class="lineno"> 80</span> <span class="comment">__declspec(dllimport) long __stdcall InterlockedExchange(long *, long);</span></div> <div class="line"><a name="l00081"></a><span class="lineno"> 81</span> <span class="comment">#define CCXX_USE_WIN32_ATOMIC 1</span></div> <div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="comment">#endif</span></div> <div class="line"><a name="l00083"></a><span class="lineno"> 83</span> <span class="comment">*/</span></div> <div class="line"><a name="l00084"></a><span class="lineno"> 84</span> </div> <div class="line"><a name="l00085"></a><span class="lineno"> 85</span> <span class="preprocessor">#else // WIN32</span></div> <div class="line"><a name="l00086"></a><span class="lineno"> 86</span> <span class="preprocessor"></span><span class="keyword">typedef</span> DWORD <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a>;</div> <div class="line"><a name="l00087"></a><span class="lineno"> 87</span> <span class="keyword">typedef</span> DWORD <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a>;</div> <div class="line"><a name="l00088"></a><span class="lineno"> 88</span> </div> <div class="line"><a name="l00089"></a><span class="lineno"> 89</span> <span class="preprocessor">#define MAX_SEM_VALUE 1000000</span></div> <div class="line"><a name="l00090"></a><span class="lineno"> 90</span> <span class="preprocessor"></span><span class="preprocessor">#define CCXX_USE_WIN32_ATOMIC 1</span></div> <div class="line"><a name="l00091"></a><span class="lineno"> 91</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00092"></a><span class="lineno"> 92</span> <span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l00093"></a><span class="lineno"> 93</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00094"></a><span class="lineno"> 94</span> <span class="preprocessor">#ifdef HAVE_GCC_CXX_BITS_ATOMIC</span></div> <div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="preprocessor"></span><span class="preprocessor">#include <ios></span></div> <div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="preprocessor">#ifdef CCXX_NAMESPACES</span></div> <div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="preprocessor"></span><span class="keyword">namespace </span>ost {</div> <div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="preprocessor">#ifdef __BORLANDC__</span></div> <div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="preprocessor"></span><span class="preprocessor"># if __BORLANDC__ >= 0x0560</span></div> <div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="preprocessor"></span><span class="keyword">using</span> std::time_t;</div> <div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="keyword">using</span> std::tm;</div> <div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="preprocessor"># endif</span></div> <div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> <div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> <div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="preprocessor">#ifdef HAVE_GCC_CXX_BITS_ATOMIC</span></div> <div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="preprocessor"></span><span class="keyword">using namespace </span>__gnu_cxx;</div> <div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="namespaceost.html#a1a3b6738f6f759fcb52b544a4787cbb2"> 112</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread.html">Thread</a>;</div> <div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="namespaceost.html#a1a0b31279d4e241eba24d251d1682176"> 113</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread_key.html">ThreadKey</a>;</div> <div class="line"><a name="l00114"></a><span class="lineno"> 114</span> </div> <div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="thread_8h.html#a74f2d4c747bce0b8f7f7c1f48e651876"> 115</a></span> <span class="preprocessor">#define TIMEOUT_INF ~((timeout_t) 0)</span></div> <div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="thread_8h.html#a9d5589bc014dcec626ff198d5c9370cd"> 117</a></span> <span class="preprocessor">#define ENTER_CRITICAL enterMutex();</span></div> <div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="thread_8h.html#af1b76aeceb2370c5fcedee46f9cd3d09"> 118</a></span> <span class="preprocessor"></span><span class="preprocessor">#define LEAVE_CRITICAL leaveMutex();</span></div> <div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="thread_8h.html#a61438c8055883ef92ffb09c68f70f049"> 119</a></span> <span class="preprocessor"></span><span class="preprocessor">#define ENTER_DEFERRED setCancel(cancelDeferred);</span></div> <div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="thread_8h.html#ac6e53238dd0519d7c7117b2b40d4312b"> 120</a></span> <span class="preprocessor"></span><span class="preprocessor">#define LEAVE_DEFERRED setCancel(cancelImmediate);</span></div> <div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="preprocessor"></span><span class="comment">// These macros override common functions with thread-safe versions. In</span></div> <div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment">// particular the common "libc" sleep() has problems since it normally</span></div> <div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// uses SIGARLM (as actually defined by "posix"). The pthread_delay and</span></div> <div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment">// usleep found in libpthread are gaurenteed not to use SIGALRM and offer</span></div> <div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment">// higher resolution. psleep() is defined to call the old process sleep.</span></div> <div class="line"><a name="l00128"></a><span class="lineno"> 128</span> </div> <div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="preprocessor">#undef sleep</span></div> <div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="thread_8h.html#a5e09ab8cba99b274fd420bd76f39b205"> 130</a></span> <span class="preprocessor"></span><span class="preprocessor">#define psleep(x) (sleep)(x)</span></div> <div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="preprocessor">#ifdef signal</span></div> <div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="preprocessor"></span><span class="preprocessor">#undef signal</span></div> <div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="preprocessor"></span><span class="preprocessor">#endif</span></div> <div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="preprocessor">#undef Yield</span></div> <div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="namespaceost.html#a4528eecdfa02ab10dbfdc49f5b238506"> 140</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_conditional.html">Conditional</a>;</div> <div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="namespaceost.html#aa1f2ab8ff95e0568261375df5837eb19"> 141</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_event.html">Event</a>;</div> <div class="line"><a name="l00142"></a><span class="lineno"> 142</span> </div> <div class="line"><a name="l00186"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html"> 186</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex.html">Mutex</a></div> <div class="line"><a name="l00187"></a><span class="lineno"> 187</span> {</div> <div class="line"><a name="l00188"></a><span class="lineno"> 188</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> _debug;</div> <div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <a class="code" href="classost_1_1_string.html">String</a> _name;</div> <div class="line"><a name="l00191"></a><span class="lineno"> 191</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00192"></a><span class="lineno"> 192</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef PTHREAD_MUTEXTYPE_RECURSIVE</span></div> <div class="line"><a name="l00193"></a><span class="lineno"> 193</span> <span class="preprocessor"></span> <span class="keywordtype">int</span> <span class="keyword">volatile</span> _level;</div> <div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <a class="code" href="classost_1_1_thread.html">Thread</a> *<span class="keyword">volatile</span> _tid;</div> <div class="line"><a name="l00195"></a><span class="lineno"> 195</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00196"></a><span class="lineno"> 196</span> <span class="preprocessor"></span> <span class="comment">/*</span></div> <div class="line"><a name="l00197"></a><span class="lineno"> 197</span> <span class="comment"> * Pthread mutex object. This is protected rather than private</span></div> <div class="line"><a name="l00198"></a><span class="lineno"> 198</span> <span class="comment"> * because some mixed mode pthread operations require a mutex as</span></div> <div class="line"><a name="l00199"></a><span class="lineno"> 199</span> <span class="comment"> * well as their primary pthread object. A good example of this</span></div> <div class="line"><a name="l00200"></a><span class="lineno"> 200</span> <span class="comment"> * is the Event class, as waiting on a conditional object must be</span></div> <div class="line"><a name="l00201"></a><span class="lineno"> 201</span> <span class="comment"> * associated with an accessable mutex. An alternative would be</span></div> <div class="line"><a name="l00202"></a><span class="lineno"> 202</span> <span class="comment"> * to make such classes "friend" classes of the Mutex.</span></div> <div class="line"><a name="l00203"></a><span class="lineno"> 203</span> <span class="comment"> */</span></div> <div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  pthread_mutex_t _mutex;</div> <div class="line"><a name="l00205"></a><span class="lineno"> 205</span> <span class="preprocessor">#else // WIN32</span></div> <div class="line"><a name="l00206"></a><span class="lineno"> 206</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00207"></a><span class="lineno"> 207</span> <span class="preprocessor"># if defined(MUTEX_UNDERGROUND_WIN32_MUTEX) && defined(MUTEX_UNDERGROUND_WIN32_CRITICALSECTION)</span></div> <div class="line"><a name="l00208"></a><span class="lineno"> 208</span> <span class="preprocessor"></span><span class="preprocessor"># error "Can't determine underground for Mutex"</span></div> <div class="line"><a name="l00209"></a><span class="lineno"> 209</span> <span class="preprocessor"></span><span class="preprocessor"># endif</span></div> <div class="line"><a name="l00210"></a><span class="lineno"> 210</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00211"></a><span class="lineno"> 211</span> <span class="preprocessor">#ifdef MUTEX_UNDERGROUND_WIN32_MUTEX</span></div> <div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="preprocessor"></span> <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> _mutex;</div> <div class="line"><a name="l00213"></a><span class="lineno"> 213</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00214"></a><span class="lineno"> 214</span> <span class="preprocessor"></span><span class="preprocessor">#ifdef MUTEX_UNDERGROUND_WIN32_CRITICALSECTION</span></div> <div class="line"><a name="l00215"></a><span class="lineno"> 215</span> <span class="preprocessor"></span> CRITICAL_SECTION _criticalSection;</div> <div class="line"><a name="l00216"></a><span class="lineno"> 216</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00217"></a><span class="lineno"> 217</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00218"></a><span class="lineno"> 218</span> <span class="preprocessor">#endif // WIN32</span></div> <div class="line"><a name="l00219"></a><span class="lineno"> 219</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <a class="code" href="classost_1_1_mutex.html">Mutex</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name = NULL);</div> <div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div> <div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_mutex.html">Mutex</a>();</div> <div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div> <div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html#a83b66f786e344b5192a3993d319aa735"> 240</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_mutex.html#a83b66f786e344b5192a3993d319aa735">setDebug</a>(<span class="keywordtype">bool</span> mode)</div> <div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  {_debug = mode;};</div> <div class="line"><a name="l00242"></a><span class="lineno"> 242</span> </div> <div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html#abed8b05b63f9cdd2c9ca1f92081b1a8a"> 248</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_mutex.html#abed8b05b63f9cdd2c9ca1f92081b1a8a">nameMutex</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *name)</div> <div class="line"><a name="l00249"></a><span class="lineno"> 249</span>  {_name = name;};</div> <div class="line"><a name="l00250"></a><span class="lineno"> 250</span> </div> <div class="line"><a name="l00258"></a><span class="lineno"> 258</span>  <span class="keywordtype">void</span> enterMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00259"></a><span class="lineno"> 259</span> </div> <div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html#aecb516325583e432bf2bf7e4b565f6f6"> 263</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_mutex.html#aecb516325583e432bf2bf7e4b565f6f6">enter</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00264"></a><span class="lineno"> 264</span>  {enterMutex();};</div> <div class="line"><a name="l00265"></a><span class="lineno"> 265</span> </div> <div class="line"><a name="l00269"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html#ab6aaecac9c95d31a5862014d7f1afe73"> 269</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_mutex.html#ab6aaecac9c95d31a5862014d7f1afe73">leave</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00270"></a><span class="lineno"> 270</span>  {leaveMutex();};</div> <div class="line"><a name="l00271"></a><span class="lineno"> 271</span> </div> <div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="classost_1_1_mutex.html#ac1ff5454b2c9b55790c4bf33f751704c"> 277</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classost_1_1_mutex.html#ac1ff5454b2c9b55790c4bf33f751704c">test</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00278"></a><span class="lineno"> 278</span>  {<span class="keywordflow">return</span> tryEnterMutex();};</div> <div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div> <div class="line"><a name="l00290"></a><span class="lineno"> 290</span>  <span class="keywordtype">bool</span> tryEnterMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div> <div class="line"><a name="l00302"></a><span class="lineno"> 302</span>  <span class="keywordtype">void</span> leaveMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00303"></a><span class="lineno"> 303</span> };</div> <div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div> <div class="line"><a name="l00328"></a><span class="lineno"><a class="line" href="classost_1_1_mutex_lock.html"> 328</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex_lock.html">MutexLock</a></div> <div class="line"><a name="l00329"></a><span class="lineno"> 329</span> {</div> <div class="line"><a name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <a class="code" href="classost_1_1_mutex.html">Mutex</a>& mutex;</div> <div class="line"><a name="l00332"></a><span class="lineno"> 332</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00338"></a><span class="lineno"><a class="line" href="classost_1_1_mutex_lock.html#aedb21cfad9b0f1200d055fb69efa2546"> 338</a></span>  <a class="code" href="classost_1_1_mutex_lock.html#aedb21cfad9b0f1200d055fb69efa2546">MutexLock</a>( <a class="code" href="classost_1_1_mutex.html">Mutex</a>& _mutex ) : mutex( _mutex )</div> <div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  { mutex.enterMutex(); }</div> <div class="line"><a name="l00340"></a><span class="lineno"> 340</span> </div> <div class="line"><a name="l00344"></a><span class="lineno"> 344</span>  <span class="comment">// this should be not-virtual</span></div> <div class="line"><a name="l00345"></a><span class="lineno"><a class="line" href="classost_1_1_mutex_lock.html#a58bba3406d89b40c8bd3e9ac389b920c"> 345</a></span>  <a class="code" href="classost_1_1_mutex_lock.html#a58bba3406d89b40c8bd3e9ac389b920c">~MutexLock</a>()</div> <div class="line"><a name="l00346"></a><span class="lineno"> 346</span>  { mutex.leaveMutex(); }</div> <div class="line"><a name="l00347"></a><span class="lineno"> 347</span> };</div> <div class="line"><a name="l00348"></a><span class="lineno"> 348</span> </div> <div class="line"><a name="l00357"></a><span class="lineno"><a class="line" href="classost_1_1_thread_lock.html"> 357</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a></div> <div class="line"><a name="l00358"></a><span class="lineno"> 358</span> {</div> <div class="line"><a name="l00359"></a><span class="lineno"> 359</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="preprocessor">#ifdef HAVE_PTHREAD_RWLOCK</span></div> <div class="line"><a name="l00361"></a><span class="lineno"> 361</span> <span class="preprocessor"></span> pthread_rwlock_t _lock;</div> <div class="line"><a name="l00362"></a><span class="lineno"> 362</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00363"></a><span class="lineno"> 363</span> <span class="preprocessor"></span> <a class="code" href="classost_1_1_mutex.html">Mutex</a> mutex;</div> <div class="line"><a name="l00364"></a><span class="lineno"> 364</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00365"></a><span class="lineno"> 365</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00366"></a><span class="lineno"> 366</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>();</div> <div class="line"><a name="l00371"></a><span class="lineno"> 371</span> </div> <div class="line"><a name="l00375"></a><span class="lineno"> 375</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>();</div> <div class="line"><a name="l00376"></a><span class="lineno"> 376</span> </div> <div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keywordtype">void</span> readLock(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00381"></a><span class="lineno"> 381</span> </div> <div class="line"><a name="l00385"></a><span class="lineno"> 385</span>  <span class="keywordtype">void</span> writeLock(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div> <div class="line"><a name="l00392"></a><span class="lineno"> 392</span>  <span class="keywordtype">bool</span> tryReadLock(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div> <div class="line"><a name="l00399"></a><span class="lineno"> 399</span>  <span class="keywordtype">bool</span> tryWriteLock(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00400"></a><span class="lineno"> 400</span> </div> <div class="line"><a name="l00404"></a><span class="lineno"> 404</span>  <span class="keywordtype">void</span> unlock(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00405"></a><span class="lineno"> 405</span> };</div> <div class="line"><a name="l00406"></a><span class="lineno"> 406</span> </div> <div class="line"><a name="l00427"></a><span class="lineno"><a class="line" href="classost_1_1_read_lock.html"> 427</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_read_lock.html">ReadLock</a></div> <div class="line"><a name="l00428"></a><span class="lineno"> 428</span> {</div> <div class="line"><a name="l00429"></a><span class="lineno"> 429</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00430"></a><span class="lineno"> 430</span>  <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>& tl;</div> <div class="line"><a name="l00431"></a><span class="lineno"> 431</span> </div> <div class="line"><a name="l00432"></a><span class="lineno"> 432</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00438"></a><span class="lineno"><a class="line" href="classost_1_1_read_lock.html#a05b7c96baf6695c580871d0aaf01c149"> 438</a></span>  <a class="code" href="classost_1_1_read_lock.html#a05b7c96baf6695c580871d0aaf01c149">ReadLock</a>( <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>& _tl ) : tl( _tl )</div> <div class="line"><a name="l00439"></a><span class="lineno"> 439</span>  { tl.readLock(); }</div> <div class="line"><a name="l00443"></a><span class="lineno"> 443</span>  <span class="comment">// this should be not-virtual</span></div> <div class="line"><a name="l00444"></a><span class="lineno"><a class="line" href="classost_1_1_read_lock.html#a166b6a55b9fa7072be782b7eccf30a98"> 444</a></span>  <a class="code" href="classost_1_1_read_lock.html#a166b6a55b9fa7072be782b7eccf30a98">~ReadLock</a>()</div> <div class="line"><a name="l00445"></a><span class="lineno"> 445</span>  { tl.unlock(); }</div> <div class="line"><a name="l00446"></a><span class="lineno"> 446</span> };</div> <div class="line"><a name="l00447"></a><span class="lineno"> 447</span> </div> <div class="line"><a name="l00468"></a><span class="lineno"><a class="line" href="classost_1_1_write_lock.html"> 468</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_write_lock.html">WriteLock</a></div> <div class="line"><a name="l00469"></a><span class="lineno"> 469</span> {</div> <div class="line"><a name="l00470"></a><span class="lineno"> 470</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00471"></a><span class="lineno"> 471</span>  <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>& tl;</div> <div class="line"><a name="l00472"></a><span class="lineno"> 472</span> </div> <div class="line"><a name="l00473"></a><span class="lineno"> 473</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00479"></a><span class="lineno"><a class="line" href="classost_1_1_write_lock.html#a93a59b1f5f09dfdaee18eca85759f86e"> 479</a></span>  <a class="code" href="classost_1_1_write_lock.html#a93a59b1f5f09dfdaee18eca85759f86e">WriteLock</a>( <a class="code" href="classost_1_1_thread_lock.html">ThreadLock</a>& _tl ) : tl( _tl )</div> <div class="line"><a name="l00480"></a><span class="lineno"> 480</span>  { tl.writeLock(); }</div> <div class="line"><a name="l00484"></a><span class="lineno"> 484</span>  <span class="comment">// this should be not-virtual</span></div> <div class="line"><a name="l00485"></a><span class="lineno"><a class="line" href="classost_1_1_write_lock.html#a67a6fef0c02e06cbbf6069715c38cba5"> 485</a></span>  <a class="code" href="classost_1_1_write_lock.html#a67a6fef0c02e06cbbf6069715c38cba5">~WriteLock</a>()</div> <div class="line"><a name="l00486"></a><span class="lineno"> 486</span>  { tl.unlock(); }</div> <div class="line"><a name="l00487"></a><span class="lineno"> 487</span> };</div> <div class="line"><a name="l00488"></a><span class="lineno"> 488</span> </div> <div class="line"><a name="l00489"></a><span class="lineno"> 489</span> </div> <div class="line"><a name="l00499"></a><span class="lineno"><a class="line" href="classost_1_1_mutex_counter.html"> 499</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_mutex_counter.html">MutexCounter</a> : <span class="keyword">public</span> <a class="code" href="classost_1_1_mutex.html">Mutex</a></div> <div class="line"><a name="l00500"></a><span class="lineno"> 500</span> {</div> <div class="line"><a name="l00501"></a><span class="lineno"> 501</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00502"></a><span class="lineno"> 502</span>  <span class="keyword">volatile</span> <span class="keywordtype">int</span> counter;</div> <div class="line"><a name="l00503"></a><span class="lineno"> 503</span> </div> <div class="line"><a name="l00504"></a><span class="lineno"> 504</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00510"></a><span class="lineno"> 510</span>  <a class="code" href="classost_1_1_mutex_counter.html">MutexCounter</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);</div> <div class="line"><a name="l00511"></a><span class="lineno"> 511</span> </div> <div class="line"><a name="l00519"></a><span class="lineno"> 519</span>  <a class="code" href="classost_1_1_mutex_counter.html">MutexCounter</a>(<span class="keywordtype">int</span> initial, <span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);</div> <div class="line"><a name="l00520"></a><span class="lineno"> 520</span> </div> <div class="line"><a name="l00521"></a><span class="lineno"> 521</span>  <span class="keyword">friend</span> <a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <span class="keywordtype">int</span> operator++(<a class="code" href="classost_1_1_mutex_counter.html">MutexCounter</a> &mc);</div> <div class="line"><a name="l00522"></a><span class="lineno"> 522</span>  <span class="keyword">friend</span> <a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <span class="keywordtype">int</span> operator--(<a class="code" href="classost_1_1_mutex_counter.html">MutexCounter</a> &mc);</div> <div class="line"><a name="l00523"></a><span class="lineno"> 523</span> };</div> <div class="line"><a name="l00524"></a><span class="lineno"> 524</span> </div> <div class="line"><a name="l00535"></a><span class="lineno"><a class="line" href="classost_1_1_atomic_counter.html"> 535</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a></div> <div class="line"><a name="l00536"></a><span class="lineno"> 536</span> {</div> <div class="line"><a name="l00537"></a><span class="lineno"> 537</span> <span class="preprocessor">#ifndef CCXX_USE_WIN32_ATOMIC</span></div> <div class="line"><a name="l00538"></a><span class="lineno"> 538</span> <span class="preprocessor"></span><span class="keyword">private</span>:</div> <div class="line"><a name="l00539"></a><span class="lineno"> 539</span> <span class="preprocessor">#if defined(HAVE_ATOMIC_AIX)</span></div> <div class="line"><a name="l00540"></a><span class="lineno"> 540</span> <span class="preprocessor"></span> <span class="keyword">volatile</span> <span class="keywordtype">int</span> counter;</div> <div class="line"><a name="l00541"></a><span class="lineno"> 541</span> <span class="preprocessor">#elif defined(HAVE_GCC_BITS_ATOMIC)</span></div> <div class="line"><a name="l00542"></a><span class="lineno"> 542</span> <span class="preprocessor"></span> <span class="keyword">volatile</span> _Atomic_word counter;</div> <div class="line"><a name="l00543"></a><span class="lineno"> 543</span> <span class="preprocessor">#elif defined(HAVE_GCC_CXX_BITS_ATOMIC)</span></div> <div class="line"><a name="l00544"></a><span class="lineno"> 544</span> <span class="preprocessor"></span> <span class="keyword">volatile</span> _Atomic_word counter;</div> <div class="line"><a name="l00545"></a><span class="lineno"> 545</span> <span class="comment">// __gnu_cxx::_Atomic_word counter;</span></div> <div class="line"><a name="l00546"></a><span class="lineno"> 546</span> <span class="preprocessor">#elif defined(HAVE_ATOMIC)</span></div> <div class="line"><a name="l00547"></a><span class="lineno"> 547</span> <span class="preprocessor"></span> atomic_t atomic;</div> <div class="line"><a name="l00548"></a><span class="lineno"> 548</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00549"></a><span class="lineno"> 549</span> <span class="preprocessor"></span> <span class="keyword">volatile</span> <span class="keywordtype">int</span> counter;</div> <div class="line"><a name="l00550"></a><span class="lineno"> 550</span>  pthread_mutex_t _mutex;</div> <div class="line"><a name="l00551"></a><span class="lineno"> 551</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00552"></a><span class="lineno"> 552</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00553"></a><span class="lineno"> 553</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00557"></a><span class="lineno"> 557</span>  <a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a>();</div> <div class="line"><a name="l00558"></a><span class="lineno"> 558</span> </div> <div class="line"><a name="l00564"></a><span class="lineno"> 564</span>  <a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a>(<span class="keywordtype">int</span> value);</div> <div class="line"><a name="l00565"></a><span class="lineno"> 565</span> </div> <div class="line"><a name="l00566"></a><span class="lineno"> 566</span>  ~<a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a>();</div> <div class="line"><a name="l00567"></a><span class="lineno"> 567</span> </div> <div class="line"><a name="l00568"></a><span class="lineno"> 568</span>  <span class="keywordtype">int</span> operator++(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00569"></a><span class="lineno"> 569</span>  <span class="keywordtype">int</span> operator--(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00570"></a><span class="lineno"> 570</span>  <span class="keywordtype">int</span> operator+=(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00571"></a><span class="lineno"> 571</span>  <span class="keywordtype">int</span> operator-=(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00572"></a><span class="lineno"> 572</span>  <span class="keywordtype">int</span> operator+(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00573"></a><span class="lineno"> 573</span>  <span class="keywordtype">int</span> operator-(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00574"></a><span class="lineno"> 574</span>  <span class="keywordtype">int</span> operator=(<span class="keywordtype">int</span> value);</div> <div class="line"><a name="l00575"></a><span class="lineno"> 575</span>  <span class="keywordtype">bool</span> operator!(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00576"></a><span class="lineno"> 576</span>  <span class="keyword">operator</span> int();</div> <div class="line"><a name="l00577"></a><span class="lineno"> 577</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00578"></a><span class="lineno"> 578</span> <span class="preprocessor"></span><span class="keyword">private</span>:</div> <div class="line"><a name="l00579"></a><span class="lineno"> 579</span>  <span class="keywordtype">long</span> atomic;</div> <div class="line"><a name="l00580"></a><span class="lineno"> 580</span> </div> <div class="line"><a name="l00581"></a><span class="lineno"> 581</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00582"></a><span class="lineno"> 582</span>  <span class="keyword">inline</span> <a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a>()</div> <div class="line"><a name="l00583"></a><span class="lineno"> 583</span>  {atomic = 0;};</div> <div class="line"><a name="l00584"></a><span class="lineno"> 584</span> </div> <div class="line"><a name="l00585"></a><span class="lineno"> 585</span>  <span class="keyword">inline</span> <a class="code" href="classost_1_1_atomic_counter.html">AtomicCounter</a>(<span class="keywordtype">int</span> value)</div> <div class="line"><a name="l00586"></a><span class="lineno"> 586</span>  {atomic = value;};</div> <div class="line"><a name="l00587"></a><span class="lineno"> 587</span> </div> <div class="line"><a name="l00588"></a><span class="lineno"> 588</span>  <span class="keyword">inline</span> <span class="keywordtype">int</span> operator++(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00589"></a><span class="lineno"> 589</span>  {<span class="keywordflow">return</span> InterlockedIncrement(&atomic);};</div> <div class="line"><a name="l00590"></a><span class="lineno"> 590</span> </div> <div class="line"><a name="l00591"></a><span class="lineno"> 591</span>  <span class="keyword">inline</span> <span class="keywordtype">int</span> operator--(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00592"></a><span class="lineno"> 592</span>  {<span class="keywordflow">return</span> InterlockedDecrement(&atomic);};</div> <div class="line"><a name="l00593"></a><span class="lineno"> 593</span> </div> <div class="line"><a name="l00594"></a><span class="lineno"> 594</span>  <span class="keywordtype">int</span> operator+=(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00595"></a><span class="lineno"> 595</span> </div> <div class="line"><a name="l00596"></a><span class="lineno"> 596</span>  <span class="keywordtype">int</span> operator-=(<span class="keywordtype">int</span> change);</div> <div class="line"><a name="l00597"></a><span class="lineno"> 597</span> </div> <div class="line"><a name="l00598"></a><span class="lineno"> 598</span>  <span class="keyword">inline</span> <span class="keywordtype">int</span> operator+(<span class="keywordtype">int</span> change)</div> <div class="line"><a name="l00599"></a><span class="lineno"> 599</span>  {<span class="keywordflow">return</span> atomic + change;};</div> <div class="line"><a name="l00600"></a><span class="lineno"> 600</span> </div> <div class="line"><a name="l00601"></a><span class="lineno"> 601</span>  <span class="keyword">inline</span> <span class="keywordtype">int</span> operator-(<span class="keywordtype">int</span> change)</div> <div class="line"><a name="l00602"></a><span class="lineno"> 602</span>  {<span class="keywordflow">return</span> atomic - change;};</div> <div class="line"><a name="l00603"></a><span class="lineno"> 603</span> </div> <div class="line"><a name="l00604"></a><span class="lineno"> 604</span>  <span class="keyword">inline</span> <span class="keywordtype">int</span> operator=(<span class="keywordtype">int</span> value)</div> <div class="line"><a name="l00605"></a><span class="lineno"> 605</span>  {<span class="keywordflow">return</span> InterlockedExchange(&atomic, value);};</div> <div class="line"><a name="l00606"></a><span class="lineno"> 606</span> </div> <div class="line"><a name="l00607"></a><span class="lineno"> 607</span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator!(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00608"></a><span class="lineno"> 608</span>  {<span class="keywordflow">return</span> (atomic == 0) ? <span class="keyword">true</span> : <span class="keyword">false</span>;};</div> <div class="line"><a name="l00609"></a><span class="lineno"> 609</span> </div> <div class="line"><a name="l00610"></a><span class="lineno"> 610</span>  <span class="keyword">inline</span> <span class="keyword">operator</span> int()</div> <div class="line"><a name="l00611"></a><span class="lineno"> 611</span>  {<span class="keywordflow">return</span> atomic;};</div> <div class="line"><a name="l00612"></a><span class="lineno"> 612</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00613"></a><span class="lineno"> 613</span> <span class="preprocessor"></span>};</div> <div class="line"><a name="l00614"></a><span class="lineno"> 614</span> </div> <div class="line"><a name="l00615"></a><span class="lineno"> 615</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00616"></a><span class="lineno"> 616</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00636"></a><span class="lineno"><a class="line" href="classost_1_1_conditional.html"> 636</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_conditional.html">Conditional</a></div> <div class="line"><a name="l00637"></a><span class="lineno"> 637</span> {</div> <div class="line"><a name="l00638"></a><span class="lineno"> 638</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00639"></a><span class="lineno"> 639</span>  pthread_cond_t _cond;</div> <div class="line"><a name="l00640"></a><span class="lineno"> 640</span>  pthread_mutex_t _mutex;</div> <div class="line"><a name="l00641"></a><span class="lineno"> 641</span> </div> <div class="line"><a name="l00642"></a><span class="lineno"> 642</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00648"></a><span class="lineno"> 648</span>  <a class="code" href="namespaceost.html#a4528eecdfa02ab10dbfdc49f5b238506">Conditional</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *<span class="keywordtype">id</span> = NULL);</div> <div class="line"><a name="l00649"></a><span class="lineno"> 649</span> </div> <div class="line"><a name="l00653"></a><span class="lineno"> 653</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_conditional.html">Conditional</a>();</div> <div class="line"><a name="l00654"></a><span class="lineno"> 654</span> </div> <div class="line"><a name="l00660"></a><span class="lineno"> 660</span>  <span class="keywordtype">void</span> signal(<span class="keywordtype">bool</span> broadcast);</div> <div class="line"><a name="l00661"></a><span class="lineno"> 661</span> </div> <div class="line"><a name="l00668"></a><span class="lineno"> 668</span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer = 0, <span class="keywordtype">bool</span> locked = <span class="keyword">false</span>);</div> <div class="line"><a name="l00669"></a><span class="lineno"> 669</span> </div> <div class="line"><a name="l00676"></a><span class="lineno"> 676</span>  <span class="keywordtype">void</span> enterMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00677"></a><span class="lineno"> 677</span> </div> <div class="line"><a name="l00686"></a><span class="lineno"><a class="line" href="classost_1_1_conditional.html#a2a3bf89c582dad8ba7e81370fd361668"> 686</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_conditional.html#a2a3bf89c582dad8ba7e81370fd361668">lock</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00687"></a><span class="lineno"> 687</span>  {enterMutex();};</div> <div class="line"><a name="l00688"></a><span class="lineno"> 688</span> </div> <div class="line"><a name="l00699"></a><span class="lineno"> 699</span>  <span class="keywordtype">bool</span> tryEnterMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00700"></a><span class="lineno"> 700</span> </div> <div class="line"><a name="l00701"></a><span class="lineno"><a class="line" href="classost_1_1_conditional.html#a507839fac82a32f946fa5f87d41bef28"> 701</a></span>  <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="classost_1_1_conditional.html#a507839fac82a32f946fa5f87d41bef28">test</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00702"></a><span class="lineno"> 702</span>  {<span class="keywordflow">return</span> tryEnterMutex();};</div> <div class="line"><a name="l00703"></a><span class="lineno"> 703</span> </div> <div class="line"><a name="l00709"></a><span class="lineno"> 709</span>  <span class="keywordtype">void</span> leaveMutex(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00710"></a><span class="lineno"> 710</span> </div> <div class="line"><a name="l00711"></a><span class="lineno"><a class="line" href="classost_1_1_conditional.html#a8b6126bbb6e58c1b8ef937bebf4af222"> 711</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_conditional.html#a8b6126bbb6e58c1b8ef937bebf4af222">unlock</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l00712"></a><span class="lineno"> 712</span>  {<span class="keywordflow">return</span> leaveMutex();};</div> <div class="line"><a name="l00713"></a><span class="lineno"> 713</span> };</div> <div class="line"><a name="l00714"></a><span class="lineno"> 714</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00715"></a><span class="lineno"> 715</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00733"></a><span class="lineno"><a class="line" href="classost_1_1_semaphore.html"> 733</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_semaphore.html">Semaphore</a></div> <div class="line"><a name="l00734"></a><span class="lineno"> 734</span> {</div> <div class="line"><a name="l00735"></a><span class="lineno"> 735</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00736"></a><span class="lineno"> 736</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00737"></a><span class="lineno"> 737</span> <span class="preprocessor"></span> <span class="keywordtype">unsigned</span> _count, _waiters;</div> <div class="line"><a name="l00738"></a><span class="lineno"> 738</span>  pthread_mutex_t _mutex;</div> <div class="line"><a name="l00739"></a><span class="lineno"> 739</span>  pthread_cond_t _cond;</div> <div class="line"><a name="l00740"></a><span class="lineno"> 740</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00741"></a><span class="lineno"> 741</span> <span class="preprocessor"></span> <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> semObject;</div> <div class="line"><a name="l00742"></a><span class="lineno"> 742</span> <span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l00743"></a><span class="lineno"> 743</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00744"></a><span class="lineno"> 744</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00753"></a><span class="lineno"> 753</span>  <a class="code" href="classost_1_1_semaphore.html">Semaphore</a>(<span class="keywordtype">unsigned</span> resource = 0);</div> <div class="line"><a name="l00754"></a><span class="lineno"> 754</span> </div> <div class="line"><a name="l00761"></a><span class="lineno"> 761</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_semaphore.html">Semaphore</a>();</div> <div class="line"><a name="l00762"></a><span class="lineno"> 762</span> </div> <div class="line"><a name="l00778"></a><span class="lineno"> 778</span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0);</div> <div class="line"><a name="l00779"></a><span class="lineno"> 779</span> </div> <div class="line"><a name="l00791"></a><span class="lineno"> 791</span>  <span class="keywordtype">void</span> post(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00792"></a><span class="lineno"> 792</span> </div> <div class="line"><a name="l00793"></a><span class="lineno"> 793</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00794"></a><span class="lineno"> 794</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00802"></a><span class="lineno"> 802</span>  <span class="keywordtype">void</span> force_unlock_after_cancellation();</div> <div class="line"><a name="l00803"></a><span class="lineno"> 803</span> </div> <div class="line"><a name="l00804"></a><span class="lineno"> 804</span> <span class="preprocessor">#endif // WIN32</span></div> <div class="line"><a name="l00805"></a><span class="lineno"> 805</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00806"></a><span class="lineno"> 806</span>  <span class="comment">// FIXME: how implement getValue for posix compatibility ?</span></div> <div class="line"><a name="l00807"></a><span class="lineno"> 807</span>  <span class="comment">// not portable...</span></div> <div class="line"><a name="l00808"></a><span class="lineno"> 808</span> <span class="preprocessor">#if 0</span></div> <div class="line"><a name="l00809"></a><span class="lineno"> 809</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00814"></a><span class="lineno"> 814</span>  <span class="keywordtype">int</span> getValue(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00815"></a><span class="lineno"> 815</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00816"></a><span class="lineno"> 816</span> <span class="preprocessor"></span>};</div> <div class="line"><a name="l00817"></a><span class="lineno"> 817</span> </div> <div class="line"><a name="l00837"></a><span class="lineno"><a class="line" href="classost_1_1_semaphore_lock.html"> 837</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_semaphore_lock.html">SemaphoreLock</a></div> <div class="line"><a name="l00838"></a><span class="lineno"> 838</span> {</div> <div class="line"><a name="l00839"></a><span class="lineno"> 839</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00840"></a><span class="lineno"> 840</span>  <a class="code" href="classost_1_1_semaphore.html">Semaphore</a>& sem;</div> <div class="line"><a name="l00841"></a><span class="lineno"> 841</span> </div> <div class="line"><a name="l00842"></a><span class="lineno"> 842</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00846"></a><span class="lineno"><a class="line" href="classost_1_1_semaphore_lock.html#adb34354071ac2005870fb78926887a05"> 846</a></span>  <a class="code" href="classost_1_1_semaphore_lock.html#adb34354071ac2005870fb78926887a05">SemaphoreLock</a>( <a class="code" href="classost_1_1_semaphore.html">Semaphore</a>& _sem ) : sem( _sem )</div> <div class="line"><a name="l00847"></a><span class="lineno"> 847</span>  { sem.wait(); }</div> <div class="line"><a name="l00851"></a><span class="lineno"> 851</span>  <span class="comment">// this should be not-virtual</span></div> <div class="line"><a name="l00852"></a><span class="lineno"><a class="line" href="classost_1_1_semaphore_lock.html#a59bf7e09b61fd3b900070841fae86597"> 852</a></span>  <a class="code" href="classost_1_1_semaphore_lock.html#a59bf7e09b61fd3b900070841fae86597">~SemaphoreLock</a>()</div> <div class="line"><a name="l00853"></a><span class="lineno"> 853</span>  { sem.post(); }</div> <div class="line"><a name="l00854"></a><span class="lineno"> 854</span> };</div> <div class="line"><a name="l00855"></a><span class="lineno"> 855</span> </div> <div class="line"><a name="l00869"></a><span class="lineno"><a class="line" href="classost_1_1_event.html"> 869</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_event.html">Event</a></div> <div class="line"><a name="l00870"></a><span class="lineno"> 870</span> {</div> <div class="line"><a name="l00871"></a><span class="lineno"> 871</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l00872"></a><span class="lineno"> 872</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l00873"></a><span class="lineno"> 873</span> <span class="preprocessor"></span> pthread_mutex_t _mutex;</div> <div class="line"><a name="l00874"></a><span class="lineno"> 874</span>  pthread_cond_t _cond;</div> <div class="line"><a name="l00875"></a><span class="lineno"> 875</span>  <span class="keywordtype">bool</span> _signaled;</div> <div class="line"><a name="l00876"></a><span class="lineno"> 876</span>  <span class="keywordtype">int</span> _count;</div> <div class="line"><a name="l00877"></a><span class="lineno"> 877</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l00878"></a><span class="lineno"> 878</span> <span class="preprocessor"></span> <a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> cond;</div> <div class="line"><a name="l00879"></a><span class="lineno"> 879</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l00880"></a><span class="lineno"> 880</span> <span class="preprocessor"></span></div> <div class="line"><a name="l00881"></a><span class="lineno"> 881</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l00882"></a><span class="lineno"> 882</span>  <a class="code" href="namespaceost.html#aa1f2ab8ff95e0568261375df5837eb19">Event</a>();</div> <div class="line"><a name="l00883"></a><span class="lineno"> 883</span> </div> <div class="line"><a name="l00884"></a><span class="lineno"> 884</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_event.html">Event</a>();</div> <div class="line"><a name="l00885"></a><span class="lineno"> 885</span> </div> <div class="line"><a name="l00892"></a><span class="lineno"> 892</span>  <span class="keywordtype">void</span> reset(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00893"></a><span class="lineno"> 893</span> </div> <div class="line"><a name="l00897"></a><span class="lineno"> 897</span>  <span class="keywordtype">void</span> signal(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00898"></a><span class="lineno"> 898</span> </div> <div class="line"><a name="l00907"></a><span class="lineno"> 907</span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer);</div> <div class="line"><a name="l00908"></a><span class="lineno"> 908</span>  <span class="keywordtype">bool</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l00909"></a><span class="lineno"> 909</span> };</div> <div class="line"><a name="l00910"></a><span class="lineno"> 910</span> </div> <div class="line"><a name="l00911"></a><span class="lineno"> 911</span> </div> <div class="line"><a name="l01093"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html"> 1093</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread.html">Thread</a></div> <div class="line"><a name="l01094"></a><span class="lineno"> 1094</span> {</div> <div class="line"><a name="l01095"></a><span class="lineno"> 1095</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01099"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674d"> 1099</a></span>  <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674d">Throw</a> {</div> <div class="line"><a name="l01100"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da1b058025329425c90f383d124ee605e5"> 1100</a></span>  <a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da1b058025329425c90f383d124ee605e5">throwNothing</a>, </div> <div class="line"><a name="l01101"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674daea5957cd08cfecf17f366352bcf9ad80"> 1101</a></span>  <a class="code" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674daea5957cd08cfecf17f366352bcf9ad80">throwObject</a>, </div> <div class="line"><a name="l01102"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da8e51a6870e65238764becffff92d7f54"> 1102</a></span>  throwException </div> <div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>  } Throw;</div> <div class="line"><a name="l01104"></a><span class="lineno"> 1104</span> </div> <div class="line"><a name="l01108"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b"> 1108</a></span>  <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Cancel</a> {</div> <div class="line"><a name="l01109"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69babbf14157c17311ec31f0967032ecb357"> 1109</a></span>  cancelInitial=0, </div> <div class="line"><a name="l01110"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bab02b8cd8d899a693e8cbb86082f4ef16"> 1110</a></span>  cancelDeferred=1, </div> <div class="line"><a name="l01111"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69ba57f820ea4f7a326c27cc504a213e167d"> 1111</a></span>  <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69ba57f820ea4f7a326c27cc504a213e167d">cancelImmediate</a>, </div> <div class="line"><a name="l01112"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bae07cc9f6d3d7333c8cce543a8bb58215"> 1112</a></span>  <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bae07cc9f6d3d7333c8cce543a8bb58215">cancelDisabled</a>, </div> <div class="line"><a name="l01113"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69baa194b63cafc5387684afe7943fe3b5f0"> 1113</a></span>  cancelManual, </div> <div class="line"><a name="l01115"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69badf753e6d700f194c1b8f695a9bd67554"> 1115</a></span>  cancelDefault=cancelDeferred</div> <div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>  } Cancel;</div> <div class="line"><a name="l01118"></a><span class="lineno"> 1118</span> </div> <div class="line"><a name="l01122"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087"> 1122</a></span>  <span class="keyword">typedef</span> <span class="keyword">enum</span> <a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087">Suspend</a> {</div> <div class="line"><a name="l01123"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a27f2f61f4bc18b64e9c25f73bb008a38"> 1123</a></span>  <a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a27f2f61f4bc18b64e9c25f73bb008a38">suspendEnable</a>, </div> <div class="line"><a name="l01124"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a0e9f14f0e69d8c12c36a46d108a5074b"> 1124</a></span>  suspendDisable </div> <div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>  } Suspend;</div> <div class="line"><a name="l01126"></a><span class="lineno"> 1126</span> </div> <div class="line"><a name="l01127"></a><span class="lineno"> 1127</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l01128"></a><span class="lineno"> 1128</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01129"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#abc1a729c4204bc85f58c47042f429acb"> 1129</a></span> <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_posix_thread.html">PosixThread</a>;</div> <div class="line"><a name="l01130"></a><span class="lineno"> 1130</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01131"></a><span class="lineno"> 1131</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01132"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a9b6e94561c96e07e8f2dd776bbc19396"> 1132</a></span> <span class="keyword">friend</span> <span class="keyword">class </span>DummyThread;</div> <div class="line"><a name="l01133"></a><span class="lineno"> 1133</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01134"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#abbf97e2c58c760acb67b9db3a7ba11db"> 1134</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_cancellation.html">Cancellation</a>;</div> <div class="line"><a name="l01135"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ae156bb5074cfe5c3a729890e0ded952f"> 1135</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span>postream_type;</div> <div class="line"><a name="l01136"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#af08013a89bf19b835ba6f75a60f870ed"> 1136</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_slog.html">Slog</a>;</div> <div class="line"><a name="l01137"></a><span class="lineno"> 1137</span> </div> <div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>  <a class="code" href="classost_1_1_semaphore.html">Semaphore</a> joinSem;</div> <div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>  <span class="keyword">static</span> <a class="code" href="classost_1_1_thread.html">Thread</a>* _main;</div> <div class="line"><a name="l01140"></a><span class="lineno"> 1140</span> </div> <div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>  <a class="code" href="classost_1_1_thread.html">Thread</a> *_parent;</div> <div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>  <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Cancel</a> _cancel;</div> <div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>  <a class="code" href="classost_1_1_semaphore.html">Semaphore</a> *_start;</div> <div class="line"><a name="l01144"></a><span class="lineno"> 1144</span> </div> <div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>  <span class="comment">// private data</span></div> <div class="line"><a name="l01146"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#ae3c1cdb20d70b22a5c0bf395614eefff"> 1146</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span>ThreadImpl;</div> <div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>  <span class="keyword">class </span>ThreadImpl* priv;</div> <div class="line"><a name="l01148"></a><span class="lineno"> 1148</span> </div> <div class="line"><a name="l01149"></a><span class="lineno"> 1149</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>  <span class="keyword">static</span> <a class="code" href="classost_1_1_thread.html">Thread</a> *<span class="keyword">get</span>(void);</div> <div class="line"><a name="l01151"></a><span class="lineno"> 1151</span> </div> <div class="line"><a name="l01152"></a><span class="lineno"> 1152</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01153"></a><span class="lineno"> 1153</span> <span class="preprocessor">#ifdef WIN32</span></div> <div class="line"><a name="l01154"></a><span class="lineno"> 1154</span> <span class="preprocessor"></span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> __stdcall Execute(<a class="code" href="classost_1_1_thread.html">Thread</a> *th);</div> <div class="line"><a name="l01155"></a><span class="lineno"> 1155</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01156"></a><span class="lineno"> 1156</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>  <span class="comment">// close current thread, free all and call Notify</span></div> <div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>  <span class="keywordtype">void</span> close();</div> <div class="line"><a name="l01159"></a><span class="lineno"> 1159</span> </div> <div class="line"><a name="l01160"></a><span class="lineno"> 1160</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>  <span class="keywordtype">char</span> _name[32];</div> <div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>  <span class="keyword">static</span> <span class="keywordtype">size_t</span> _autostack;</div> <div class="line"><a name="l01163"></a><span class="lineno"> 1163</span> </div> <div class="line"><a name="l01164"></a><span class="lineno"> 1164</span> <span class="preprocessor">#ifdef WIN32</span></div> <div class="line"><a name="l01165"></a><span class="lineno"> 1165</span> <span class="preprocessor"></span> DWORD waitHandle(<a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> obj, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);</div> <div class="line"><a name="l01166"></a><span class="lineno"> 1166</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01167"></a><span class="lineno"> 1167</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01168"></a><span class="lineno"> 1168</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l01176"></a><span class="lineno"> 1176</span>  <span class="keywordtype">void</span> setName(<span class="keyword">const</span> <span class="keywordtype">char</span> *text);</div> <div class="line"><a name="l01177"></a><span class="lineno"> 1177</span> </div> <div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> run(<span class="keywordtype">void</span>) = 0;</div> <div class="line"><a name="l01188"></a><span class="lineno"> 1188</span> </div> <div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> <span class="keyword">final</span>(void);</div> <div class="line"><a name="l01211"></a><span class="lineno"> 1211</span> </div> <div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> initial(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01224"></a><span class="lineno"> 1224</span> </div> <div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span>* getExtended(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01235"></a><span class="lineno"> 1235</span> </div> <div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> notify(<a class="code" href="classost_1_1_thread.html">Thread</a>*);</div> <div class="line"><a name="l01244"></a><span class="lineno"> 1244</span> </div> <div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>  <span class="keywordtype">void</span> exit(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01251"></a><span class="lineno"> 1251</span> </div> <div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>  <span class="keywordtype">void</span> sync(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01256"></a><span class="lineno"> 1256</span> </div> <div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>  <span class="keywordtype">bool</span> testCancel(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01261"></a><span class="lineno"> 1261</span> </div> <div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>  <span class="keywordtype">void</span> setCancel(<a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Cancel</a> mode);</div> <div class="line"><a name="l01272"></a><span class="lineno"> 1272</span> </div> <div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>  <span class="keywordtype">void</span> setSuspend(<a class="code" href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087">Suspend</a> mode);</div> <div class="line"><a name="l01281"></a><span class="lineno"> 1281</span> </div> <div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>  <span class="keywordtype">void</span> terminate(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01291"></a><span class="lineno"> 1291</span> </div> <div class="line"><a name="l01295"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a5e574c2c5f388277527c9257524dd654"> 1295</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_thread.html#a5e574c2c5f388277527c9257524dd654">clrParent</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>  {_parent = NULL;};</div> <div class="line"><a name="l01297"></a><span class="lineno"> 1297</span> </div> <div class="line"><a name="l01298"></a><span class="lineno"> 1298</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>  <a class="code" href="namespaceost.html#a1a3b6738f6f759fcb52b544a4787cbb2">Thread</a>(<span class="keywordtype">bool</span> isMain);</div> <div class="line"><a name="l01308"></a><span class="lineno"> 1308</span> </div> <div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>  <a class="code" href="namespaceost.html#a1a3b6738f6f759fcb52b544a4787cbb2">Thread</a>(<span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0);</div> <div class="line"><a name="l01321"></a><span class="lineno"> 1321</span> </div> <div class="line"><a name="l01322"></a><span class="lineno"> 1322</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l01323"></a><span class="lineno"> 1323</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>  <a class="code" href="namespaceost.html#a1a3b6738f6f759fcb52b544a4787cbb2">Thread</a>(<span class="keyword">const</span> <a class="code" href="classost_1_1_thread.html">Thread</a> &th);</div> <div class="line"><a name="l01332"></a><span class="lineno"> 1332</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01333"></a><span class="lineno"> 1333</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_thread.html">Thread</a>();</div> <div class="line"><a name="l01341"></a><span class="lineno"> 1341</span> </div> <div class="line"><a name="l01347"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#accd29b724539d63a8495d954f9f56c72"> 1347</a></span>  <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_thread.html#accd29b724539d63a8495d954f9f56c72">setStack</a>(<span class="keywordtype">size_t</span> size = 0)</div> <div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>  {_autostack = size;};</div> <div class="line"><a name="l01349"></a><span class="lineno"> 1349</span> </div> <div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> sleep(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> msec);</div> <div class="line"><a name="l01360"></a><span class="lineno"> 1360</span> </div> <div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> yield(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01366"></a><span class="lineno"> 1366</span> </div> <div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>  <span class="keywordtype">int</span> start(<a class="code" href="classost_1_1_semaphore.html">Semaphore</a> *start = 0);</div> <div class="line"><a name="l01380"></a><span class="lineno"> 1380</span> </div> <div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>  <span class="keywordtype">int</span> detach(<a class="code" href="classost_1_1_semaphore.html">Semaphore</a> *start = 0);</div> <div class="line"><a name="l01390"></a><span class="lineno"> 1390</span> </div> <div class="line"><a name="l01397"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#aac5bc230c3bad5c837baa9e6d01f4c24"> 1397</a></span>  <span class="keyword">inline</span> <a class="code" href="classost_1_1_thread.html">Thread</a> *<a class="code" href="classost_1_1_thread.html#aac5bc230c3bad5c837baa9e6d01f4c24">getParent</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>  {<span class="keywordflow">return</span> _parent;};</div> <div class="line"><a name="l01399"></a><span class="lineno"> 1399</span> </div> <div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>  <span class="keywordtype">void</span> suspend(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01407"></a><span class="lineno"> 1407</span> </div> <div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>  <span class="keywordtype">void</span> resume(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01412"></a><span class="lineno"> 1412</span> </div> <div class="line"><a name="l01419"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a3524521d80bcc0562fb59a28ce5d62a4"> 1419</a></span>  <span class="keyword">inline</span> <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Cancel</a> <a class="code" href="classost_1_1_thread.html#a3524521d80bcc0562fb59a28ce5d62a4">getCancel</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>  {<span class="keywordflow">return</span> _cancel;};</div> <div class="line"><a name="l01421"></a><span class="lineno"> 1421</span> </div> <div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>  <span class="keywordtype">bool</span> isRunning(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01429"></a><span class="lineno"> 1429</span> </div> <div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>  <span class="keywordtype">bool</span> isDetached(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01436"></a><span class="lineno"> 1436</span> </div> <div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>  <span class="keywordtype">void</span> join(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01441"></a><span class="lineno"> 1441</span> </div> <div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>  <span class="keywordtype">bool</span> isThread(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01449"></a><span class="lineno"> 1449</span> </div> <div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>  <a class="code" href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a> getId(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01456"></a><span class="lineno"> 1456</span> </div> <div class="line"><a name="l01463"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a6b578a4a82d61060d1b17109caddc1a5"> 1463</a></span>  <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="classost_1_1_thread.html#a6b578a4a82d61060d1b17109caddc1a5">getName</a>(<span class="keywordtype">void</span>)<span class="keyword"> const</span></div> <div class="line"><a name="l01464"></a><span class="lineno"> 1464</span> <span class="keyword"> </span>{<span class="keywordflow">return</span> _name;};</div> <div class="line"><a name="l01465"></a><span class="lineno"> 1465</span> </div> <div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>  <span class="keyword">static</span> Throw getException(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01472"></a><span class="lineno"> 1472</span> </div> <div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> setException(Throw mode);</div> <div class="line"><a name="l01479"></a><span class="lineno"> 1479</span> </div> <div class="line"><a name="l01486"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#a2742c471d2abe8712368ccff8d534702"> 1486</a></span>  <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_thread.html#a2742c471d2abe8712368ccff8d534702">operator++</a>(<a class="code" href="classost_1_1_thread.html">Thread</a> &th)</div> <div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>  {<span class="keywordflow">if</span> (th._start) th._start-><a class="code" href="classost_1_1_semaphore.html#a7535c9c3f3c60596b21b5275342cbe1e">post</a>();};</div> <div class="line"><a name="l01488"></a><span class="lineno"> 1488</span> </div> <div class="line"><a name="l01489"></a><span class="lineno"><a class="line" href="classost_1_1_thread.html#aa797f8e5a1ea5b857251f98f0d50614e"> 1489</a></span>  <span class="keyword">friend</span> <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_thread.html#aa797f8e5a1ea5b857251f98f0d50614e">operator--</a>(<a class="code" href="classost_1_1_thread.html">Thread</a> &th)</div> <div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>  {<span class="keywordflow">if</span> (th._start) th._start-><a class="code" href="classost_1_1_semaphore.html#a1f2526be16a463d2392a74f668a91d80">wait</a>();};</div> <div class="line"><a name="l01491"></a><span class="lineno"> 1491</span> </div> <div class="line"><a name="l01492"></a><span class="lineno"> 1492</span> <span class="preprocessor">#ifdef WIN32</span></div> <div class="line"><a name="l01493"></a><span class="lineno"> 1493</span> <span class="preprocessor"></span> <span class="keywordtype">bool</span> isCancelled() <span class="keyword">const</span>;</div> <div class="line"><a name="l01494"></a><span class="lineno"> 1494</span> </div> <div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>  <span class="keyword">static</span> DWORD waitThread(<a class="code" href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a> hRef, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);</div> <div class="line"><a name="l01496"></a><span class="lineno"> 1496</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01497"></a><span class="lineno"> 1497</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>  <span class="keyword">static</span> Cancel enterCancel(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01506"></a><span class="lineno"> 1506</span> </div> <div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> exitCancel(Cancel cancel);</div> <div class="line"><a name="l01513"></a><span class="lineno"> 1513</span> };</div> <div class="line"><a name="l01514"></a><span class="lineno"> 1514</span> </div> <div class="line"><a name="l01524"></a><span class="lineno"><a class="line" href="classost_1_1_cancellation.html"> 1524</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_cancellation.html">Cancellation</a></div> <div class="line"><a name="l01525"></a><span class="lineno"> 1525</span> {</div> <div class="line"><a name="l01526"></a><span class="lineno"> 1526</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>  <a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Thread::Cancel</a> prior;</div> <div class="line"><a name="l01528"></a><span class="lineno"> 1528</span> </div> <div class="line"><a name="l01529"></a><span class="lineno"> 1529</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>  <a class="code" href="classost_1_1_cancellation.html">Cancellation</a>(<a class="code" href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">Thread::Cancel</a> cancel);</div> <div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>  ~<a class="code" href="classost_1_1_cancellation.html">Cancellation</a>();</div> <div class="line"><a name="l01532"></a><span class="lineno"> 1532</span> };</div> <div class="line"><a name="l01533"></a><span class="lineno"> 1533</span> </div> <div class="line"><a name="l01534"></a><span class="lineno"> 1534</span> <span class="preprocessor">#if !defined(WIN32) && !defined(__MINGW32__)</span></div> <div class="line"><a name="l01535"></a><span class="lineno"><a class="line" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e"> 1535</a></span> <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> <a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a>;</div> <div class="line"><a name="l01536"></a><span class="lineno"> 1536</span> </div> <div class="line"><a name="l01537"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html"> 1537</a></span> <span class="keyword">class </span><a class="code" href="classost_1_1_posix_thread.html">PosixThread</a>: <span class="keyword">public</span> <a class="code" href="classost_1_1_thread.html">Thread</a></div> <div class="line"><a name="l01538"></a><span class="lineno"> 1538</span> {</div> <div class="line"><a name="l01539"></a><span class="lineno"> 1539</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01540"></a><span class="lineno"> 1540</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l01541"></a><span class="lineno"> 1541</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01542"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html#ae3c1cdb20d70b22a5c0bf395614eefff"> 1542</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span>ThreadImpl;</div> <div class="line"><a name="l01543"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html#adbc148eaddd341d7ae4d07c9e9e33bfd"> 1543</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span><a class="code" href="classost_1_1_thread.html">Thread</a>;</div> <div class="line"><a name="l01544"></a><span class="lineno"> 1544</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01545"></a><span class="lineno"> 1545</span> <span class="preprocessor"></span><span class="preprocessor">#ifndef CCXX_SIG_THREAD_ALARM</span></div> <div class="line"><a name="l01546"></a><span class="lineno"> 1546</span> <span class="preprocessor"></span> <span class="keyword">static</span> <a class="code" href="classost_1_1_posix_thread.html">PosixThread</a> *_timer;</div> <div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>  <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html">Mutex</a> _arm;</div> <div class="line"><a name="l01548"></a><span class="lineno"> 1548</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01549"></a><span class="lineno"> 1549</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>  time_t _alarm;</div> <div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> signalThread(<a class="code" href="classost_1_1_thread.html">Thread</a>* th,<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);</div> <div class="line"><a name="l01552"></a><span class="lineno"> 1552</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l01553"></a><span class="lineno"> 1553</span> </div> <div class="line"><a name="l01560"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html#a1698de2b943084fe05849cbd42099156"> 1560</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#a1698de2b943084fe05849cbd42099156">signalParent</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo)</div> <div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>  { signalThread(_parent,signo); };</div> <div class="line"><a name="l01562"></a><span class="lineno"> 1562</span> </div> <div class="line"><a name="l01569"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html#ad13ab707409d229be9c5b64a0e2ec7ad"> 1569</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#ad13ab707409d229be9c5b64a0e2ec7ad">signalMain</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo)</div> <div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>  { signalThread(_main,signo);};</div> <div class="line"><a name="l01571"></a><span class="lineno"> 1571</span> </div> <div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onTimer(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01577"></a><span class="lineno"> 1577</span> </div> <div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onHangup(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01583"></a><span class="lineno"> 1583</span> </div> <div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onException(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01589"></a><span class="lineno"> 1589</span> </div> <div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onDisconnect(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01595"></a><span class="lineno"> 1595</span> </div> <div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onPolling(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01601"></a><span class="lineno"> 1601</span> </div> <div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>  <span class="keyword">virtual</span> <span class="keywordtype">void</span> onSignal(<span class="keywordtype">int</span>);</div> <div class="line"><a name="l01609"></a><span class="lineno"> 1609</span> </div> <div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>  <span class="keywordtype">void</span> setTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timer, <span class="keywordtype">bool</span> periodic = <span class="keyword">false</span>);</div> <div class="line"><a name="l01623"></a><span class="lineno"> 1623</span> </div> <div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>  <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> getTimer(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01631"></a><span class="lineno"> 1631</span> </div> <div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>  <span class="keywordtype">void</span> endTimer(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01638"></a><span class="lineno"> 1638</span> </div> <div class="line"><a name="l01639"></a><span class="lineno"> 1639</span> <span class="preprocessor">#if defined(HAVE_SIGWAIT) || defined(HAVE_SIGWAIT2)</span></div> <div class="line"><a name="l01640"></a><span class="lineno"> 1640</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>  <span class="keywordtype">void</span> waitSignal(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);</div> <div class="line"><a name="l01647"></a><span class="lineno"> 1647</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01648"></a><span class="lineno"> 1648</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>  <span class="keywordtype">void</span> setSignal(<span class="keywordtype">int</span> signo, <span class="keywordtype">bool</span> active);</div> <div class="line"><a name="l01656"></a><span class="lineno"> 1656</span> </div> <div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>  pthread_attr_t *getPthreadAttrPtr(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01664"></a><span class="lineno"> 1664</span> </div> <div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>  pthread_t getPthreadId(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01670"></a><span class="lineno"> 1670</span> </div> <div class="line"><a name="l01671"></a><span class="lineno"> 1671</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01672"></a><span class="lineno"> 1672</span> </div> <div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>  <a class="code" href="classost_1_1_posix_thread.html">PosixThread</a>(<span class="keywordtype">int</span> pri = 0, <span class="keywordtype">size_t</span> stack = 0);</div> <div class="line"><a name="l01674"></a><span class="lineno"> 1674</span> </div> <div class="line"><a name="l01680"></a><span class="lineno"><a class="line" href="classost_1_1_posix_thread.html#afa168ff1446785a43b1123703d999207"> 1680</a></span>  <span class="keyword">inline</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_posix_thread.html#afa168ff1446785a43b1123703d999207">signalThread</a>(<span class="keywordtype">int</span> signo)</div> <div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>  {signalThread(<span class="keyword">this</span>, signo);};</div> <div class="line"><a name="l01682"></a><span class="lineno"> 1682</span> </div> <div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>  <span class="keyword">static</span> <span class="keywordtype">void</span> sigInstall(<span class="keywordtype">int</span> signo);</div> <div class="line"><a name="l01690"></a><span class="lineno"> 1690</span> };</div> <div class="line"><a name="l01691"></a><span class="lineno"> 1691</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01692"></a><span class="lineno"> 1692</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01707"></a><span class="lineno"><a class="line" href="classost_1_1_thread_key.html"> 1707</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_thread_key.html">ThreadKey</a></div> <div class="line"><a name="l01708"></a><span class="lineno"> 1708</span> {</div> <div class="line"><a name="l01709"></a><span class="lineno"> 1709</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01710"></a><span class="lineno"> 1710</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l01711"></a><span class="lineno"> 1711</span> <span class="preprocessor"></span> pthread_key_t key;</div> <div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>  <span class="keyword">typedef</span> void (*TDestruct)(<span class="keywordtype">void</span>*);</div> <div class="line"><a name="l01713"></a><span class="lineno"><a class="line" href="classost_1_1_thread_key.html#ae3c1cdb20d70b22a5c0bf395614eefff"> 1713</a></span>  <span class="keyword">friend</span> <span class="keyword">class </span>ThreadImpl;</div> <div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>  <a class="code" href="namespaceost.html#a1a0b31279d4e241eba24d251d1682176">ThreadKey</a>(TDestruct destruct);</div> <div class="line"><a name="l01715"></a><span class="lineno"> 1715</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l01716"></a><span class="lineno"> 1716</span> <span class="preprocessor"></span> DWORD key;</div> <div class="line"><a name="l01717"></a><span class="lineno"> 1717</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01718"></a><span class="lineno"> 1718</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01719"></a><span class="lineno"> 1719</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>  <a class="code" href="namespaceost.html#a1a0b31279d4e241eba24d251d1682176">ThreadKey</a>();</div> <div class="line"><a name="l01724"></a><span class="lineno"> 1724</span> </div> <div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>  <span class="keyword">virtual</span> ~<a class="code" href="classost_1_1_thread_key.html">ThreadKey</a>();</div> <div class="line"><a name="l01729"></a><span class="lineno"> 1729</span> </div> <div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>  <span class="keywordtype">void</span> *getKey(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01738"></a><span class="lineno"> 1738</span> </div> <div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>  <span class="keywordtype">void</span> setKey(<span class="keywordtype">void</span> *);</div> <div class="line"><a name="l01747"></a><span class="lineno"> 1747</span> };</div> <div class="line"><a name="l01748"></a><span class="lineno"> 1748</span> </div> <div class="line"><a name="l01759"></a><span class="lineno"><a class="line" href="classost_1_1_timer_port.html"> 1759</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_timer_port.html">TimerPort</a></div> <div class="line"><a name="l01760"></a><span class="lineno"> 1760</span> {</div> <div class="line"><a name="l01761"></a><span class="lineno"> 1761</span> <span class="preprocessor">#ifndef WIN32</span></div> <div class="line"><a name="l01762"></a><span class="lineno"> 1762</span> <span class="preprocessor"></span> <span class="keyword">struct </span>timeval timer;</div> <div class="line"><a name="l01763"></a><span class="lineno"> 1763</span> <span class="preprocessor">#else</span></div> <div class="line"><a name="l01764"></a><span class="lineno"> 1764</span> <span class="preprocessor"></span> DWORD timer;</div> <div class="line"><a name="l01765"></a><span class="lineno"> 1765</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01766"></a><span class="lineno"> 1766</span> <span class="preprocessor"></span> <span class="keywordtype">bool</span> active;</div> <div class="line"><a name="l01767"></a><span class="lineno"> 1767</span> </div> <div class="line"><a name="l01768"></a><span class="lineno"> 1768</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>  <a class="code" href="classost_1_1_timer_port.html">TimerPort</a>();</div> <div class="line"><a name="l01776"></a><span class="lineno"> 1776</span> </div> <div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>  <span class="keywordtype">void</span> setTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout = 0);</div> <div class="line"><a name="l01786"></a><span class="lineno"> 1786</span> </div> <div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>  <span class="keywordtype">void</span> incTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);</div> <div class="line"><a name="l01797"></a><span class="lineno"> 1797</span> </div> <div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>  <span class="keywordtype">void</span> decTimer(<a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);</div> <div class="line"><a name="l01808"></a><span class="lineno"> 1808</span> </div> <div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>  <span class="keywordtype">void</span> sleepTimer(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01814"></a><span class="lineno"> 1814</span> </div> <div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>  <span class="keywordtype">void</span> endTimer(<span class="keywordtype">void</span>);</div> <div class="line"><a name="l01821"></a><span class="lineno"> 1821</span> </div> <div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>  <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> getTimer(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01834"></a><span class="lineno"> 1834</span> </div> <div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>  <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> getElapsed(<span class="keywordtype">void</span>) <span class="keyword">const</span>;</div> <div class="line"><a name="l01845"></a><span class="lineno"> 1845</span> };</div> <div class="line"><a name="l01846"></a><span class="lineno"> 1846</span> </div> <div class="line"><a name="l01847"></a><span class="lineno"> 1847</span> </div> <div class="line"><a name="l01848"></a><span class="lineno"> 1848</span> </div> <div class="line"><a name="l01849"></a><span class="lineno"> 1849</span> <span class="comment">// FIXME: not in win32 implementation</span></div> <div class="line"><a name="l01850"></a><span class="lineno"> 1850</span> <span class="preprocessor">#if !defined(WIN32)</span></div> <div class="line"><a name="l01851"></a><span class="lineno"> 1851</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01852"></a><span class="lineno"> 1852</span> <span class="comment">// FIXME: private declaration ???</span></div> <div class="line"><a name="l01853"></a><span class="lineno"> 1853</span> <span class="keyword">struct </span>timespec *<a class="code" href="namespaceost.html#a8fd139f80e945ac6d8cc53868cdacca6">getTimeout</a>(<span class="keyword">struct</span> timespec *spec, <a class="code" href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a> timeout);</div> <div class="line"><a name="l01854"></a><span class="lineno"> 1854</span> </div> <div class="line"><a name="l01855"></a><span class="lineno"> 1855</span> <span class="preprocessor">#if !defined(__CYGWIN32__) && !defined(__MINGW32__)</span></div> <div class="line"><a name="l01856"></a><span class="lineno"> 1856</span> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">wait</a>(<a class="code" href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">signo_t</a> signo);</div> <div class="line"><a name="l01857"></a><span class="lineno"> 1857</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01858"></a><span class="lineno"> 1858</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01859"></a><span class="lineno"> 1859</span> <span class="preprocessor">#endif // !WIN32</span></div> <div class="line"><a name="l01860"></a><span class="lineno"> 1860</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01861"></a><span class="lineno"> 1861</span> <span class="preprocessor">#ifdef USE_POLL</span></div> <div class="line"><a name="l01862"></a><span class="lineno"> 1862</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01870"></a><span class="lineno"> 1870</span> <span class="keyword">class </span>Poller</div> <div class="line"><a name="l01871"></a><span class="lineno"> 1871</span> {</div> <div class="line"><a name="l01872"></a><span class="lineno"> 1872</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>  <span class="keywordtype">int</span> nufds;</div> <div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>  pollfd *ufds;</div> <div class="line"><a name="l01875"></a><span class="lineno"> 1875</span> </div> <div class="line"><a name="l01876"></a><span class="lineno"> 1876</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>  Poller();</div> <div class="line"><a name="l01878"></a><span class="lineno"> 1878</span> </div> <div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>  <span class="keyword">virtual</span> ~Poller();</div> <div class="line"><a name="l01880"></a><span class="lineno"> 1880</span> </div> <div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>  pollfd *getList(<span class="keywordtype">int</span> cnt);</div> <div class="line"><a name="l01889"></a><span class="lineno"> 1889</span> </div> <div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>  <span class="keyword">inline</span> pollfd *getList(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01896"></a><span class="lineno"> 1896</span>  {<span class="keywordflow">return</span> ufds;};</div> <div class="line"><a name="l01897"></a><span class="lineno"> 1897</span> };</div> <div class="line"><a name="l01898"></a><span class="lineno"> 1898</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01899"></a><span class="lineno"> 1899</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01900"></a><span class="lineno"><a class="line" href="namespaceost.html#a99c7f7d02b00922b0f5ee62fc3bb75fd"> 1900</a></span> <span class="keyword">inline</span> <a class="code" href="classost_1_1_thread.html">Thread</a> *<a class="code" href="namespaceost.html#a99c7f7d02b00922b0f5ee62fc3bb75fd">getThread</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>  {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_thread.html#aaad41a9f7962bdc3058a429df48246fd">Thread::get</a>();}</div> <div class="line"><a name="l01902"></a><span class="lineno"> 1902</span> </div> <div class="line"><a name="l01932"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html"> 1932</a></span> <span class="keyword">class </span><a class="code" href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a> <a class="code" href="classost_1_1_sys_time.html">SysTime</a></div> <div class="line"><a name="l01933"></a><span class="lineno"> 1933</span> {</div> <div class="line"><a name="l01934"></a><span class="lineno"> 1934</span> <span class="keyword">private</span>:</div> <div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>  <span class="keyword">static</span> <a class="code" href="classost_1_1_mutex.html">Mutex</a> timeLock;</div> <div class="line"><a name="l01936"></a><span class="lineno"> 1936</span> </div> <div class="line"><a name="l01937"></a><span class="lineno"> 1937</span> <span class="keyword">protected</span>:</div> <div class="line"><a name="l01938"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#a9c5b33e9cabc7f1510653dbd1f6eb0ae"> 1938</a></span>  <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_sys_time.html#a9c5b33e9cabc7f1510653dbd1f6eb0ae">lock</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>  {timeLock.enterMutex();}</div> <div class="line"><a name="l01940"></a><span class="lineno"> 1940</span> </div> <div class="line"><a name="l01941"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#a0d75e27d952de65d6e46b38e57ba605d"> 1941</a></span>  <span class="keyword">inline</span> <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classost_1_1_sys_time.html#a0d75e27d952de65d6e46b38e57ba605d">unlock</a>(<span class="keywordtype">void</span>)</div> <div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>  {timeLock.leaveMutex();}</div> <div class="line"><a name="l01943"></a><span class="lineno"> 1943</span> </div> <div class="line"><a name="l01944"></a><span class="lineno"> 1944</span> <span class="keyword">public</span>:</div> <div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>  <span class="keyword">static</span> time_t getTime(time_t *tloc = NULL);</div> <div class="line"><a name="l01946"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#accb0dc3c9d64b224e47649211dbe7b64"> 1946</a></span>  <span class="keyword">static</span> time_t <a class="code" href="classost_1_1_sys_time.html#accb0dc3c9d64b224e47649211dbe7b64">time</a>(time_t *tloc)</div> <div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>  { <span class="keywordflow">return</span> getTime(tloc); };</div> <div class="line"><a name="l01948"></a><span class="lineno"> 1948</span> </div> <div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>  <span class="keyword">static</span> <span class="keywordtype">int</span> getTimeOfDay(<span class="keyword">struct</span> timeval *tp);</div> <div class="line"><a name="l01950"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#afc403fcaa5a8ebf81528a34e5d5a1fac"> 1950</a></span>  <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="classost_1_1_sys_time.html#afc403fcaa5a8ebf81528a34e5d5a1fac">gettimeofday</a>(<span class="keyword">struct</span> timeval *tp, <span class="keyword">struct</span> timezone *)</div> <div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>  { <span class="keywordflow">return</span> getTimeOfDay(tp); };</div> <div class="line"><a name="l01952"></a><span class="lineno"> 1952</span> </div> <div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>  <span class="keyword">static</span> <span class="keyword">struct </span>tm *getLocalTime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result);</div> <div class="line"><a name="l01954"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#af4bd7e44705486a2f0cee2cb98b2f975"> 1954</a></span>  <span class="keyword">static</span> <span class="keyword">struct </span>tm *<a class="code" href="classost_1_1_sys_time.html#af4bd7e44705486a2f0cee2cb98b2f975">locatime</a>(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result)</div> <div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>  { <span class="keywordflow">return</span> getLocalTime(clock, result); };</div> <div class="line"><a name="l01956"></a><span class="lineno"> 1956</span> </div> <div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>  <span class="keyword">static</span> <span class="keyword">struct </span>tm *getGMTTime(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result);</div> <div class="line"><a name="l01958"></a><span class="lineno"><a class="line" href="classost_1_1_sys_time.html#a1852b1563a7b8f2b96ab75bafe3948eb"> 1958</a></span>  <span class="keyword">static</span> <span class="keyword">struct </span>tm *<a class="code" href="classost_1_1_sys_time.html#a1852b1563a7b8f2b96ab75bafe3948eb">gmtime</a>(<span class="keyword">const</span> time_t *clock, <span class="keyword">struct</span> tm *result)</div> <div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>  { <span class="keywordflow">return</span> getGMTTime(clock, result);};</div> <div class="line"><a name="l01960"></a><span class="lineno"> 1960</span> };</div> <div class="line"><a name="l01961"></a><span class="lineno"> 1961</span> </div> <div class="line"><a name="l01962"></a><span class="lineno"> 1962</span> <span class="preprocessor">#ifndef HAVE_LOCALTIME_R</span></div> <div class="line"><a name="l01963"></a><span class="lineno"> 1963</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01964"></a><span class="lineno"><a class="line" href="namespaceost.html#a2532506cb80f89403523d977ef6c2345"> 1964</a></span> <span class="keyword">inline</span> <span class="keyword">struct </span>tm *<a class="code" href="namespaceost.html#a2532506cb80f89403523d977ef6c2345">localtime_r</a>(<span class="keyword">const</span> time_t *t, <span class="keyword">struct</span> tm *b)</div> <div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>  {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_sys_time.html#ac39180f2c7b282d0145134d14a288480">SysTime::getLocalTime</a>(t, b);};</div> <div class="line"><a name="l01966"></a><span class="lineno"><a class="line" href="namespaceost.html#a1951b0e03ecb3bf227e19855d3a1f11a"> 1966</a></span> <span class="keyword">inline</span> <span class="keywordtype">char</span> *<a class="code" href="namespaceost.html#a1951b0e03ecb3bf227e19855d3a1f11a">ctime_r</a>(<span class="keyword">const</span> time_t *t, <span class="keywordtype">char</span> *buf)</div> <div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>  {<span class="keywordflow">return</span> ctime(t);};</div> <div class="line"><a name="l01968"></a><span class="lineno"><a class="line" href="namespaceost.html#a64c9138a1bf7a0d56fc8060fa1e4552c"> 1968</a></span> <span class="keyword">inline</span> <span class="keyword">struct </span>tm *<a class="code" href="namespaceost.html#a64c9138a1bf7a0d56fc8060fa1e4552c">gmtime_r</a>(<span class="keyword">const</span> time_t *t, <span class="keyword">struct</span> tm *b) \</div> <div class="line"><a name="l01969"></a><span class="lineno"> 1969</span> {<span class="keywordflow">return</span> <a class="code" href="classost_1_1_sys_time.html#a0da1e5fefac7161a878daed011e79932">SysTime::getGMTTime</a>(t, b);};</div> <div class="line"><a name="l01970"></a><span class="lineno"><a class="line" href="namespaceost.html#a6d84108739f29b7fbc773f1a57a3a439"> 1970</a></span> <span class="keyword">inline</span> <span class="keywordtype">char</span> *<a class="code" href="namespaceost.html#a6d84108739f29b7fbc773f1a57a3a439">asctime_r</a>(<span class="keyword">const</span> <span class="keyword">struct</span> tm *tm, <span class="keywordtype">char</span> *b) \</div> <div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>  {<span class="keywordflow">return</span> asctime(tm);};</div> <div class="line"><a name="l01972"></a><span class="lineno"> 1972</span> </div> <div class="line"><a name="l01973"></a><span class="lineno"> 1973</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01974"></a><span class="lineno"> 1974</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01975"></a><span class="lineno"> 1975</span> <span class="preprocessor">#ifdef CCXX_NAMESPACES</span></div> <div class="line"><a name="l01976"></a><span class="lineno"> 1976</span> <span class="preprocessor"></span>}</div> <div class="line"><a name="l01977"></a><span class="lineno"> 1977</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01978"></a><span class="lineno"> 1978</span> <span class="preprocessor"></span></div> <div class="line"><a name="l01979"></a><span class="lineno"> 1979</span> <span class="preprocessor">#endif</span></div> <div class="line"><a name="l01980"></a><span class="lineno"> 1980</span> <span class="preprocessor"></span></div> <div class="ttc" id="classost_1_1_mutex_html_ab6aaecac9c95d31a5862014d7f1afe73"><div class="ttname"><a href="classost_1_1_mutex.html#ab6aaecac9c95d31a5862014d7f1afe73">ost::Mutex::leave</a></div><div class="ttdeci">void leave(void)</div><div class="ttdoc">Future abi will use enter/leave/test members. </div><div class="ttdef"><b>Definition:</b> thread.h:269</div></div> <div class="ttc" id="classost_1_1_thread_html_aff7bd364ce645eac95affbf74f1a7087"><div class="ttname"><a href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087">ost::Thread::Suspend</a></div><div class="ttdeci">Suspend</div><div class="ttdoc">How work suspend. </div><div class="ttdef"><b>Definition:</b> thread.h:1122</div></div> <div class="ttc" id="classost_1_1_conditional_html_a507839fac82a32f946fa5f87d41bef28"><div class="ttname"><a href="classost_1_1_conditional.html#a507839fac82a32f946fa5f87d41bef28">ost::Conditional::test</a></div><div class="ttdeci">bool test(void)</div><div class="ttdef"><b>Definition:</b> thread.h:701</div></div> <div class="ttc" id="classost_1_1_sys_time_html_a1852b1563a7b8f2b96ab75bafe3948eb"><div class="ttname"><a href="classost_1_1_sys_time.html#a1852b1563a7b8f2b96ab75bafe3948eb">ost::SysTime::gmtime</a></div><div class="ttdeci">static struct tm * gmtime(const time_t *clock, struct tm *result)</div><div class="ttdef"><b>Definition:</b> thread.h:1958</div></div> <div class="ttc" id="classost_1_1_thread_html_a6b578a4a82d61060d1b17109caddc1a5"><div class="ttname"><a href="classost_1_1_thread.html#a6b578a4a82d61060d1b17109caddc1a5">ost::Thread::getName</a></div><div class="ttdeci">const char * getName(void) const </div><div class="ttdoc">Get the name string for this thread, to use in debug messages. </div><div class="ttdef"><b>Definition:</b> thread.h:1463</div></div> <div class="ttc" id="classost_1_1_string_html"><div class="ttname"><a href="classost_1_1_string.html">ost::String</a></div><div class="ttdoc">This is a generic and portable string class. </div><div class="ttdef"><b>Definition:</b> string.h:77</div></div> <div class="ttc" id="namespaceost_html_a1951b0e03ecb3bf227e19855d3a1f11a"><div class="ttname"><a href="namespaceost.html#a1951b0e03ecb3bf227e19855d3a1f11a">ost::ctime_r</a></div><div class="ttdeci">char * ctime_r(const time_t *t, char *buf)</div><div class="ttdef"><b>Definition:</b> thread.h:1966</div></div> <div class="ttc" id="string_8h_html"><div class="ttname"><a href="string_8h.html">string.h</a></div><div class="ttdoc">Common C++ generic string class. </div></div> <div class="ttc" id="namespaceost_html_a5dca865b107f598c88bd2106ea56c16e"><div class="ttname"><a href="namespaceost.html#a5dca865b107f598c88bd2106ea56c16e">ost::signo_t</a></div><div class="ttdeci">int signo_t</div><div class="ttdef"><b>Definition:</b> thread.h:1535</div></div> <div class="ttc" id="serial_8h_html_a069bb8cb95b0528d5ce0304bb5561a40"><div class="ttname"><a href="serial_8h.html#a069bb8cb95b0528d5ce0304bb5561a40">HANDLE</a></div><div class="ttdeci">int HANDLE</div><div class="ttdef"><b>Definition:</b> serial.h:60</div></div> <div class="ttc" id="namespaceost_html_a99c7f7d02b00922b0f5ee62fc3bb75fd"><div class="ttname"><a href="namespaceost.html#a99c7f7d02b00922b0f5ee62fc3bb75fd">ost::getThread</a></div><div class="ttdeci">Thread * getThread(void)</div><div class="ttdef"><b>Definition:</b> thread.h:1900</div></div> <div class="ttc" id="namespaceost_html_a24c7774639b3768bdd45b65a296f6369"><div class="ttname"><a href="namespaceost.html#a24c7774639b3768bdd45b65a296f6369">ost::wait</a></div><div class="ttdeci">void wait(signo_t signo)</div></div> <div class="ttc" id="namespaceost_html_aa1f2ab8ff95e0568261375df5837eb19"><div class="ttname"><a href="namespaceost.html#aa1f2ab8ff95e0568261375df5837eb19">ost::Event</a></div><div class="ttdeci">class __EXPORT Event</div><div class="ttdef"><b>Definition:</b> thread.h:141</div></div> <div class="ttc" id="classost_1_1_write_lock_html_a67a6fef0c02e06cbbf6069715c38cba5"><div class="ttname"><a href="classost_1_1_write_lock.html#a67a6fef0c02e06cbbf6069715c38cba5">ost::WriteLock::~WriteLock</a></div><div class="ttdeci">~WriteLock()</div><div class="ttdoc">Post the semaphore automatically. </div><div class="ttdef"><b>Definition:</b> thread.h:485</div></div> <div class="ttc" id="classost_1_1_thread_html_accd29b724539d63a8495d954f9f56c72"><div class="ttname"><a href="classost_1_1_thread.html#accd29b724539d63a8495d954f9f56c72">ost::Thread::setStack</a></div><div class="ttdeci">static void setStack(size_t size=0)</div><div class="ttdoc">Set base stack limit before manual stack sizes have effect. </div><div class="ttdef"><b>Definition:</b> thread.h:1347</div></div> <div class="ttc" id="classost_1_1_write_lock_html_a93a59b1f5f09dfdaee18eca85759f86e"><div class="ttname"><a href="classost_1_1_write_lock.html#a93a59b1f5f09dfdaee18eca85759f86e">ost::WriteLock::WriteLock</a></div><div class="ttdeci">WriteLock(ThreadLock &_tl)</div><div class="ttdoc">Wait for write access. </div><div class="ttdef"><b>Definition:</b> thread.h:479</div></div> <div class="ttc" id="config_8h_html_ad10ef148ba8327bd530fc6c32c1e181c"><div class="ttname"><a href="config_8h.html#ad10ef148ba8327bd530fc6c32c1e181c">__EXPORT</a></div><div class="ttdeci">#define __EXPORT</div><div class="ttdef"><b>Definition:</b> config.h:980</div></div> <div class="ttc" id="classost_1_1_thread_html_a24f333b09607b7c48a97e05865ada69ba57f820ea4f7a326c27cc504a213e167d"><div class="ttname"><a href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69ba57f820ea4f7a326c27cc504a213e167d">ost::Thread::cancelImmediate</a></div><div class="ttdoc">exit befor cancellation </div><div class="ttdef"><b>Definition:</b> thread.h:1111</div></div> <div class="ttc" id="classost_1_1_mutex_html_aecb516325583e432bf2bf7e4b565f6f6"><div class="ttname"><a href="classost_1_1_mutex.html#aecb516325583e432bf2bf7e4b565f6f6">ost::Mutex::enter</a></div><div class="ttdeci">void enter(void)</div><div class="ttdoc">Future abi will use enter/leave/test members. </div><div class="ttdef"><b>Definition:</b> thread.h:263</div></div> <div class="ttc" id="config_8h_html"><div class="ttname"><a href="config_8h.html">config.h</a></div></div> <div class="ttc" id="classost_1_1_thread_html_a24f333b09607b7c48a97e05865ada69b"><div class="ttname"><a href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69b">ost::Thread::Cancel</a></div><div class="ttdeci">Cancel</div><div class="ttdoc">How work cancellation. </div><div class="ttdef"><b>Definition:</b> thread.h:1108</div></div> <div class="ttc" id="classost_1_1_sys_time_html_af4bd7e44705486a2f0cee2cb98b2f975"><div class="ttname"><a href="classost_1_1_sys_time.html#af4bd7e44705486a2f0cee2cb98b2f975">ost::SysTime::locatime</a></div><div class="ttdeci">static struct tm * locatime(const time_t *clock, struct tm *result)</div><div class="ttdef"><b>Definition:</b> thread.h:1954</div></div> <div class="ttc" id="classost_1_1_read_lock_html_a166b6a55b9fa7072be782b7eccf30a98"><div class="ttname"><a href="classost_1_1_read_lock.html#a166b6a55b9fa7072be782b7eccf30a98">ost::ReadLock::~ReadLock</a></div><div class="ttdeci">~ReadLock()</div><div class="ttdoc">Post the semaphore automatically. </div><div class="ttdef"><b>Definition:</b> thread.h:444</div></div> <div class="ttc" id="namespaceost_html_a4528eecdfa02ab10dbfdc49f5b238506"><div class="ttname"><a href="namespaceost.html#a4528eecdfa02ab10dbfdc49f5b238506">ost::Conditional</a></div><div class="ttdeci">class __EXPORT Conditional</div><div class="ttdef"><b>Definition:</b> thread.h:140</div></div> <div class="ttc" id="classost_1_1_sys_time_html"><div class="ttname"><a href="classost_1_1_sys_time.html">ost::SysTime</a></div><div class="ttdoc">This class is used to access non-reentrant date and time functions in the standard C library...</div><div class="ttdef"><b>Definition:</b> thread.h:1932</div></div> <div class="ttc" id="namespaceost_html_a1a3b6738f6f759fcb52b544a4787cbb2"><div class="ttname"><a href="namespaceost.html#a1a3b6738f6f759fcb52b544a4787cbb2">ost::Thread</a></div><div class="ttdeci">class __EXPORT Thread</div><div class="ttdef"><b>Definition:</b> thread.h:112</div></div> <div class="ttc" id="classost_1_1_sys_time_html_afc403fcaa5a8ebf81528a34e5d5a1fac"><div class="ttname"><a href="classost_1_1_sys_time.html#afc403fcaa5a8ebf81528a34e5d5a1fac">ost::SysTime::gettimeofday</a></div><div class="ttdeci">static int gettimeofday(struct timeval *tp, struct timezone *)</div><div class="ttdef"><b>Definition:</b> thread.h:1950</div></div> <div class="ttc" id="classost_1_1_thread_html_a5e574c2c5f388277527c9257524dd654"><div class="ttname"><a href="classost_1_1_thread.html#a5e574c2c5f388277527c9257524dd654">ost::Thread::clrParent</a></div><div class="ttdeci">void clrParent(void)</div><div class="ttdoc">clear parent thread relationship. </div><div class="ttdef"><b>Definition:</b> thread.h:1295</div></div> <div class="ttc" id="classost_1_1_sys_time_html_a0d75e27d952de65d6e46b38e57ba605d"><div class="ttname"><a href="classost_1_1_sys_time.html#a0d75e27d952de65d6e46b38e57ba605d">ost::SysTime::unlock</a></div><div class="ttdeci">static void unlock(void)</div><div class="ttdef"><b>Definition:</b> thread.h:1941</div></div> <div class="ttc" id="classost_1_1_semaphore_html_a1f2526be16a463d2392a74f668a91d80"><div class="ttname"><a href="classost_1_1_semaphore.html#a1f2526be16a463d2392a74f668a91d80">ost::Semaphore::wait</a></div><div class="ttdeci">bool wait(timeout_t timeout=0)</div><div class="ttdoc">Wait is used to keep a thread held until the semaphore counter is greater than 0. ...</div></div> <div class="ttc" id="classost_1_1_thread_html_aaad41a9f7962bdc3058a429df48246fd"><div class="ttname"><a href="classost_1_1_thread.html#aaad41a9f7962bdc3058a429df48246fd">ost::Thread::get</a></div><div class="ttdeci">static Thread * get(void)</div></div> <div class="ttc" id="thread_8h_html_a3f0d0226a694bf1e508e1b1c758e6ae6"><div class="ttname"><a href="thread_8h.html#a3f0d0226a694bf1e508e1b1c758e6ae6">cctid_t</a></div><div class="ttdeci">pthread_t cctid_t</div><div class="ttdef"><b>Definition:</b> thread.h:73</div></div> <div class="ttc" id="classost_1_1_atomic_counter_html"><div class="ttname"><a href="classost_1_1_atomic_counter.html">ost::AtomicCounter</a></div><div class="ttdoc">The AtomicCounter class offers thread-safe manipulation of an integer counter. </div><div class="ttdef"><b>Definition:</b> thread.h:535</div></div> <div class="ttc" id="classost_1_1_conditional_html_a2a3bf89c582dad8ba7e81370fd361668"><div class="ttname"><a href="classost_1_1_conditional.html#a2a3bf89c582dad8ba7e81370fd361668">ost::Conditional::lock</a></div><div class="ttdeci">void lock(void)</div><div class="ttdoc">In the future we will use lock in place of enterMutex since the conditional composite is not a recurs...</div><div class="ttdef"><b>Definition:</b> thread.h:686</div></div> <div class="ttc" id="classost_1_1_thread_html_ab9538e839c06104af2974b77d2a5674da1b058025329425c90f383d124ee605e5"><div class="ttname"><a href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674da1b058025329425c90f383d124ee605e5">ost::Thread::throwNothing</a></div><div class="ttdoc">continue without throwing error </div><div class="ttdef"><b>Definition:</b> thread.h:1100</div></div> <div class="ttc" id="thread_8h_html_af412159e5cef839836a5e7b19ee75d1c"><div class="ttname"><a href="thread_8h.html#af412159e5cef839836a5e7b19ee75d1c">timeout_t</a></div><div class="ttdeci">unsigned long timeout_t</div><div class="ttdef"><b>Definition:</b> thread.h:74</div></div> <div class="ttc" id="classost_1_1_event_html"><div class="ttname"><a href="classost_1_1_event.html">ost::Event</a></div><div class="ttdoc">The Event class implements a feature originally found in the WIN32 API; event notification. </div><div class="ttdef"><b>Definition:</b> thread.h:869</div></div> <div class="ttc" id="classost_1_1_read_lock_html_a05b7c96baf6695c580871d0aaf01c149"><div class="ttname"><a href="classost_1_1_read_lock.html#a05b7c96baf6695c580871d0aaf01c149">ost::ReadLock::ReadLock</a></div><div class="ttdeci">ReadLock(ThreadLock &_tl)</div><div class="ttdoc">Wait for read access. </div><div class="ttdef"><b>Definition:</b> thread.h:438</div></div> <div class="ttc" id="classost_1_1_mutex_lock_html"><div class="ttname"><a href="classost_1_1_mutex_lock.html">ost::MutexLock</a></div><div class="ttdoc">The MutexLock class is used to protect a section of code so that at any given time only a single thre...</div><div class="ttdef"><b>Definition:</b> thread.h:328</div></div> <div class="ttc" id="classost_1_1_semaphore_lock_html_a59bf7e09b61fd3b900070841fae86597"><div class="ttname"><a href="classost_1_1_semaphore_lock.html#a59bf7e09b61fd3b900070841fae86597">ost::SemaphoreLock::~SemaphoreLock</a></div><div class="ttdeci">~SemaphoreLock()</div><div class="ttdoc">Post the semaphore automatically. </div><div class="ttdef"><b>Definition:</b> thread.h:852</div></div> <div class="ttc" id="namespaceost_html_a2532506cb80f89403523d977ef6c2345"><div class="ttname"><a href="namespaceost.html#a2532506cb80f89403523d977ef6c2345">ost::localtime_r</a></div><div class="ttdeci">struct tm * localtime_r(const time_t *t, struct tm *b)</div><div class="ttdef"><b>Definition:</b> thread.h:1964</div></div> <div class="ttc" id="classost_1_1_thread_html_aa797f8e5a1ea5b857251f98f0d50614e"><div class="ttname"><a href="classost_1_1_thread.html#aa797f8e5a1ea5b857251f98f0d50614e">ost::Thread::operator--</a></div><div class="ttdeci">friend void operator--(Thread &th)</div><div class="ttdef"><b>Definition:</b> thread.h:1489</div></div> <div class="ttc" id="classost_1_1_cancellation_html"><div class="ttname"><a href="classost_1_1_cancellation.html">ost::Cancellation</a></div><div class="ttdoc">A class to automatically set the thread cancellation mode of a member function. </div><div class="ttdef"><b>Definition:</b> thread.h:1524</div></div> <div class="ttc" id="classost_1_1_semaphore_html_a7535c9c3f3c60596b21b5275342cbe1e"><div class="ttname"><a href="classost_1_1_semaphore.html#a7535c9c3f3c60596b21b5275342cbe1e">ost::Semaphore::post</a></div><div class="ttdeci">void post(void)</div><div class="ttdoc">Posting to a semaphore increments its current value and releases the first thread waiting for the sem...</div></div> <div class="ttc" id="classost_1_1_conditional_html_a8b6126bbb6e58c1b8ef937bebf4af222"><div class="ttname"><a href="classost_1_1_conditional.html#a8b6126bbb6e58c1b8ef937bebf4af222">ost::Conditional::unlock</a></div><div class="ttdeci">void unlock(void)</div><div class="ttdef"><b>Definition:</b> thread.h:711</div></div> <div class="ttc" id="classost_1_1_thread_html_ab9538e839c06104af2974b77d2a5674daea5957cd08cfecf17f366352bcf9ad80"><div class="ttname"><a href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674daea5957cd08cfecf17f366352bcf9ad80">ost::Thread::throwObject</a></div><div class="ttdoc">throw object that cause error (throw this) </div><div class="ttdef"><b>Definition:</b> thread.h:1101</div></div> <div class="ttc" id="classost_1_1_slog_html"><div class="ttname"><a href="classost_1_1_slog.html">ost::Slog</a></div><div class="ttdoc">The slog class is used to stream messages to the system&#39;s logging facility (syslogd). </div><div class="ttdef"><b>Definition:</b> slog.h:104</div></div> <div class="ttc" id="classost_1_1_timer_port_html"><div class="ttname"><a href="classost_1_1_timer_port.html">ost::TimerPort</a></div><div class="ttdoc">Timer ports are used to provide synchronized timing events when managed under a &quot;service thread&quot; such...</div><div class="ttdef"><b>Definition:</b> thread.h:1759</div></div> <div class="ttc" id="namespaceost_html_a1a0b31279d4e241eba24d251d1682176"><div class="ttname"><a href="namespaceost.html#a1a0b31279d4e241eba24d251d1682176">ost::ThreadKey</a></div><div class="ttdeci">class __EXPORT ThreadKey</div><div class="ttdef"><b>Definition:</b> thread.h:113</div></div> <div class="ttc" id="classost_1_1_posix_thread_html_a1698de2b943084fe05849cbd42099156"><div class="ttname"><a href="classost_1_1_posix_thread.html#a1698de2b943084fe05849cbd42099156">ost::PosixThread::signalParent</a></div><div class="ttdeci">void signalParent(signo_t signo)</div><div class="ttdoc">In the Posix version of Common C++, this can be used to send a signal into the parent thread of the c...</div><div class="ttdef"><b>Definition:</b> thread.h:1560</div></div> <div class="ttc" id="classost_1_1_mutex_lock_html_a58bba3406d89b40c8bd3e9ac389b920c"><div class="ttname"><a href="classost_1_1_mutex_lock.html#a58bba3406d89b40c8bd3e9ac389b920c">ost::MutexLock::~MutexLock</a></div><div class="ttdeci">~MutexLock()</div><div class="ttdoc">Release the mutex automatically. </div><div class="ttdef"><b>Definition:</b> thread.h:345</div></div> <div class="ttc" id="classost_1_1_mutex_lock_html_aedb21cfad9b0f1200d055fb69efa2546"><div class="ttname"><a href="classost_1_1_mutex_lock.html#aedb21cfad9b0f1200d055fb69efa2546">ost::MutexLock::MutexLock</a></div><div class="ttdeci">MutexLock(Mutex &_mutex)</div><div class="ttdoc">Acquire the mutex. </div><div class="ttdef"><b>Definition:</b> thread.h:338</div></div> <div class="ttc" id="classost_1_1_conditional_html"><div class="ttname"><a href="classost_1_1_conditional.html">ost::Conditional</a></div><div class="ttdoc">A conditional variable synchcronization object for one to one and one to many signal and control even...</div><div class="ttdef"><b>Definition:</b> thread.h:636</div></div> <div class="ttc" id="classost_1_1_mutex_html_ac1ff5454b2c9b55790c4bf33f751704c"><div class="ttname"><a href="classost_1_1_mutex.html#ac1ff5454b2c9b55790c4bf33f751704c">ost::Mutex::test</a></div><div class="ttdeci">bool test(void)</div><div class="ttdoc">Future abi will use enter/leave/test members. </div><div class="ttdef"><b>Definition:</b> thread.h:277</div></div> <div class="ttc" id="classost_1_1_sys_time_html_accb0dc3c9d64b224e47649211dbe7b64"><div class="ttname"><a href="classost_1_1_sys_time.html#accb0dc3c9d64b224e47649211dbe7b64">ost::SysTime::time</a></div><div class="ttdeci">static time_t time(time_t *tloc)</div><div class="ttdef"><b>Definition:</b> thread.h:1946</div></div> <div class="ttc" id="classost_1_1_thread_html_aac5bc230c3bad5c837baa9e6d01f4c24"><div class="ttname"><a href="classost_1_1_thread.html#aac5bc230c3bad5c837baa9e6d01f4c24">ost::Thread::getParent</a></div><div class="ttdeci">Thread * getParent(void)</div><div class="ttdoc">Gets the pointer to the Thread class which created the current thread object. </div><div class="ttdef"><b>Definition:</b> thread.h:1397</div></div> <div class="ttc" id="classost_1_1_thread_html_aff7bd364ce645eac95affbf74f1a7087a27f2f61f4bc18b64e9c25f73bb008a38"><div class="ttname"><a href="classost_1_1_thread.html#aff7bd364ce645eac95affbf74f1a7087a27f2f61f4bc18b64e9c25f73bb008a38">ost::Thread::suspendEnable</a></div><div class="ttdoc">suspend enabled </div><div class="ttdef"><b>Definition:</b> thread.h:1123</div></div> <div class="ttc" id="classost_1_1_sys_time_html_a9c5b33e9cabc7f1510653dbd1f6eb0ae"><div class="ttname"><a href="classost_1_1_sys_time.html#a9c5b33e9cabc7f1510653dbd1f6eb0ae">ost::SysTime::lock</a></div><div class="ttdeci">static void lock(void)</div><div class="ttdef"><b>Definition:</b> thread.h:1938</div></div> <div class="ttc" id="classost_1_1_mutex_html_a83b66f786e344b5192a3993d319aa735"><div class="ttname"><a href="classost_1_1_mutex.html#a83b66f786e344b5192a3993d319aa735">ost::Mutex::setDebug</a></div><div class="ttdeci">static void setDebug(bool mode)</div><div class="ttdoc">Enable or disable deadlock debugging. </div><div class="ttdef"><b>Definition:</b> thread.h:240</div></div> <div class="ttc" id="classost_1_1_thread_html_ab9538e839c06104af2974b77d2a5674d"><div class="ttname"><a href="classost_1_1_thread.html#ab9538e839c06104af2974b77d2a5674d">ost::Thread::Throw</a></div><div class="ttdeci">Throw</div><div class="ttdoc">How to raise error. </div><div class="ttdef"><b>Definition:</b> thread.h:1099</div></div> <div class="ttc" id="classost_1_1_thread_key_html"><div class="ttname"><a href="classost_1_1_thread_key.html">ost::ThreadKey</a></div><div class="ttdoc">This class allows the creation of a thread context unique &quot;pointer&quot; that can be set and retrieved and...</div><div class="ttdef"><b>Definition:</b> thread.h:1707</div></div> <div class="ttc" id="classost_1_1_mutex_html"><div class="ttname"><a href="classost_1_1_mutex.html">ost::Mutex</a></div><div class="ttdoc">The Mutex class is used to protect a section of code so that at any given time only a single thread c...</div><div class="ttdef"><b>Definition:</b> thread.h:186</div></div> <div class="ttc" id="classost_1_1_thread_html"><div class="ttname"><a href="classost_1_1_thread.html">ost::Thread</a></div><div class="ttdoc">Every thread of execution in an application is created by instantiating an object of a class derived ...</div><div class="ttdef"><b>Definition:</b> thread.h:1093</div></div> <div class="ttc" id="classost_1_1_read_lock_html"><div class="ttname"><a href="classost_1_1_read_lock.html">ost::ReadLock</a></div><div class="ttdoc">The ReadLock class is used to protect a section of code through a ThreadLock for &quot;read&quot; access to the...</div><div class="ttdef"><b>Definition:</b> thread.h:427</div></div> <div class="ttc" id="classost_1_1_posix_thread_html"><div class="ttname"><a href="classost_1_1_posix_thread.html">ost::PosixThread</a></div><div class="ttdef"><b>Definition:</b> thread.h:1537</div></div> <div class="ttc" id="classost_1_1_semaphore_lock_html"><div class="ttname"><a href="classost_1_1_semaphore_lock.html">ost::SemaphoreLock</a></div><div class="ttdoc">The SemaphoreLock class is used to protect a section of code through a semaphore so that only x insta...</div><div class="ttdef"><b>Definition:</b> thread.h:837</div></div> <div class="ttc" id="classost_1_1_mutex_html_abed8b05b63f9cdd2c9ca1f92081b1a8a"><div class="ttname"><a href="classost_1_1_mutex.html#abed8b05b63f9cdd2c9ca1f92081b1a8a">ost::Mutex::nameMutex</a></div><div class="ttdeci">void nameMutex(const char *name)</div><div class="ttdoc">Enable setting of mutex name for deadlock debug. </div><div class="ttdef"><b>Definition:</b> thread.h:248</div></div> <div class="ttc" id="namespaceost_html_a64c9138a1bf7a0d56fc8060fa1e4552c"><div class="ttname"><a href="namespaceost.html#a64c9138a1bf7a0d56fc8060fa1e4552c">ost::gmtime_r</a></div><div class="ttdeci">struct tm * gmtime_r(const time_t *t, struct tm *b)</div><div class="ttdef"><b>Definition:</b> thread.h:1968</div></div> <div class="ttc" id="namespaceost_html_a8fd139f80e945ac6d8cc53868cdacca6"><div class="ttname"><a href="namespaceost.html#a8fd139f80e945ac6d8cc53868cdacca6">ost::getTimeout</a></div><div class="ttdeci">struct timespec * getTimeout(struct timespec *spec, timeout_t timeout)</div></div> <div class="ttc" id="classost_1_1_sys_time_html_a0da1e5fefac7161a878daed011e79932"><div class="ttname"><a href="classost_1_1_sys_time.html#a0da1e5fefac7161a878daed011e79932">ost::SysTime::getGMTTime</a></div><div class="ttdeci">static struct tm * getGMTTime(const time_t *clock, struct tm *result)</div></div> <div class="ttc" id="classost_1_1_mutex_counter_html"><div class="ttname"><a href="classost_1_1_mutex_counter.html">ost::MutexCounter</a></div><div class="ttdoc">The Mutex Counter is a counter variable which can safely be incremented or decremented by multiple th...</div><div class="ttdef"><b>Definition:</b> thread.h:499</div></div> <div class="ttc" id="classost_1_1_posix_thread_html_ad13ab707409d229be9c5b64a0e2ec7ad"><div class="ttname"><a href="classost_1_1_posix_thread.html#ad13ab707409d229be9c5b64a0e2ec7ad">ost::PosixThread::signalMain</a></div><div class="ttdeci">void signalMain(signo_t signo)</div><div class="ttdoc">In the Posix version of Common C++, this can be used to send a signal into the main application threa...</div><div class="ttdef"><b>Definition:</b> thread.h:1569</div></div> <div class="ttc" id="classost_1_1_thread_html_a24f333b09607b7c48a97e05865ada69bae07cc9f6d3d7333c8cce543a8bb58215"><div class="ttname"><a href="classost_1_1_thread.html#a24f333b09607b7c48a97e05865ada69bae07cc9f6d3d7333c8cce543a8bb58215">ost::Thread::cancelDisabled</a></div><div class="ttdoc">ignore cancellation </div><div class="ttdef"><b>Definition:</b> thread.h:1112</div></div> <div class="ttc" id="classost_1_1_thread_html_a3524521d80bcc0562fb59a28ce5d62a4"><div class="ttname"><a href="classost_1_1_thread.html#a3524521d80bcc0562fb59a28ce5d62a4">ost::Thread::getCancel</a></div><div class="ttdeci">Cancel getCancel(void)</div><div class="ttdoc">Used to retrieve the cancellation mode in effect for the selected thread. </div><div class="ttdef"><b>Definition:</b> thread.h:1419</div></div> <div class="ttc" id="classost_1_1_sys_time_html_ac39180f2c7b282d0145134d14a288480"><div class="ttname"><a href="classost_1_1_sys_time.html#ac39180f2c7b282d0145134d14a288480">ost::SysTime::getLocalTime</a></div><div class="ttdeci">static struct tm * getLocalTime(const time_t *clock, struct tm *result)</div></div> <div class="ttc" id="classost_1_1_thread_lock_html"><div class="ttname"><a href="classost_1_1_thread_lock.html">ost::ThreadLock</a></div><div class="ttdoc">The ThreadLock class impliments a thread rwlock for optimal reader performance on systems which have ...</div><div class="ttdef"><b>Definition:</b> thread.h:357</div></div> <div class="ttc" id="namespaceost_html_a6d84108739f29b7fbc773f1a57a3a439"><div class="ttname"><a href="namespaceost.html#a6d84108739f29b7fbc773f1a57a3a439">ost::asctime_r</a></div><div class="ttdeci">char * asctime_r(const struct tm *tm, char *b)</div><div class="ttdef"><b>Definition:</b> thread.h:1970</div></div> <div class="ttc" id="classost_1_1_posix_thread_html_afa168ff1446785a43b1123703d999207"><div class="ttname"><a href="classost_1_1_posix_thread.html#afa168ff1446785a43b1123703d999207">ost::PosixThread::signalThread</a></div><div class="ttdeci">void signalThread(int signo)</div><div class="ttdoc">Delivers a Posix signal to the current thread. </div><div class="ttdef"><b>Definition:</b> thread.h:1680</div></div> <div class="ttc" id="classost_1_1_write_lock_html"><div class="ttname"><a href="classost_1_1_write_lock.html">ost::WriteLock</a></div><div class="ttdoc">The WriteLock class is used to protect a section of code through a ThreadLock for &quot;write&quot; access to t...</div><div class="ttdef"><b>Definition:</b> thread.h:468</div></div> <div class="ttc" id="classost_1_1_semaphore_html"><div class="ttname"><a href="classost_1_1_semaphore.html">ost::Semaphore</a></div><div class="ttdoc">A semaphore is generally used as a synchronization object between multiple threads or to protect a li...</div><div class="ttdef"><b>Definition:</b> thread.h:733</div></div> <div class="ttc" id="classost_1_1_semaphore_lock_html_adb34354071ac2005870fb78926887a05"><div class="ttname"><a href="classost_1_1_semaphore_lock.html#adb34354071ac2005870fb78926887a05">ost::SemaphoreLock::SemaphoreLock</a></div><div class="ttdeci">SemaphoreLock(Semaphore &_sem)</div><div class="ttdoc">Wait for the semaphore. </div><div class="ttdef"><b>Definition:</b> thread.h:846</div></div> <div class="ttc" id="classost_1_1_thread_html_a2742c471d2abe8712368ccff8d534702"><div class="ttname"><a href="classost_1_1_thread.html#a2742c471d2abe8712368ccff8d534702">ost::Thread::operator++</a></div><div class="ttdeci">friend void operator++(Thread &th)</div><div class="ttdoc">Signal the semaphore that the specified thread is waiting for before beginning execution. </div><div class="ttdef"><b>Definition:</b> thread.h:1486</div></div> </div><!-- fragment --></div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Thu Oct 17 2013 23:24:57 for GNU CommonC++ by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>