⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _thread_chain_8h-source.html

📁 用vc++写的一个简单的线程池的代码
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<a name="l00262"></a>00262 <a name="l00263"></a>00263                 <span class="keywordflow">if</span>( (<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#37253f8bdfe3899c4fe09602008b41fb">starttime</a> ==0 ) || ( <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ab45dae1f910885c22cebaa9f6e7feee">m_timeout</a> == -1) )<a name="l00264"></a>00264                 {<a name="l00265"></a>00265                         ReleaseMutex(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<a name="l00266"></a>00266                         <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00267"></a>00267                 }<a name="l00268"></a>00268 <a name="l00269"></a>00269                 DWORD  now = GetTickCount() ;<a name="l00270"></a>00270                 <span class="keywordflow">if</span>( (now - <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#37253f8bdfe3899c4fe09602008b41fb">starttime</a>) &gt; <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ab45dae1f910885c22cebaa9f6e7feee">m_timeout</a>)<a name="l00271"></a>00271                 {<a name="l00272"></a>00272                         printf(<span class="stringliteral">"Thread IsHung Id=%d\n"</span>,<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#c70c7a3540e9cdad3e7eac570df96315">threadId</a>);<a name="l00273"></a>00273                         ReleaseMutex(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<a name="l00274"></a>00274                         <span class="keywordflow">return</span> <span class="keyword">true</span>;<a name="l00275"></a>00275                 }<a name="l00276"></a>00276 <a name="l00277"></a>00277                 ReleaseMutex(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<a name="l00278"></a>00278                 <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00279"></a>00279         }<a name="l00280"></a>00280 <a name="l00281"></a>00281         <span class="comment">//To check if this thread is idle and can be released</span><a name="l00282"></a>00282         <span class="comment">// Note - it is a prerequisite that this is called only after</span><a name="l00283"></a>00283         <span class="comment">// checking if the thread has hung</span><a name="l00284"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#435db32c0943a54cfd703185fb62f759">00284</a>         <span class="keywordtype">bool</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#435db32c0943a54cfd703185fb62f759">ReleaseIdleThread</a>()<a name="l00285"></a>00285         {<a name="l00286"></a>00286                 WaitForSingleObject(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>,INFINITE);<a name="l00287"></a>00287 <a name="l00288"></a>00288                 <span class="comment">//thread count is equal to the minimum thread count</span><a name="l00289"></a>00289                 <span class="keywordflow">if</span>(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>-&gt;m_threadCount &lt;= <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>-&gt;minthreadCount)<a name="l00290"></a>00290                 {<a name="l00291"></a>00291                         ReleaseMutex(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<a name="l00292"></a>00292                         <span class="keywordflow">return</span> <span class="keyword">false</span>;<a name="l00293"></a>00293                 }<a name="l00294"></a>00294 <a name="l00295"></a>00295                 <span class="comment">//printf("Excess thread[%d] ThreadCount=%d\n",threadId,threadpool-&gt;m_threadCount);</span><a name="l00296"></a>00296 <a name="l00297"></a>00297                 <span class="keywordtype">bool</span> bReleasethis= <span class="keyword">false</span>;<a name="l00298"></a>00298 <a name="l00299"></a>00299                 <span class="keywordflow">if</span>(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#796e3dca1d2286547e1e75095272ef64">lastactivetime</a> == 0)<a name="l00300"></a>00300                 {<a name="l00301"></a>00301                         printf(<span class="stringliteral">"This thread was never executed\n"</span>);<a name="l00302"></a>00302                         bReleasethis=<span class="keyword">false</span>;<a name="l00303"></a>00303                 }<span class="keywordflow">else</span> <span class="keywordflow">if</span>(GetTickCount()-<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#796e3dca1d2286547e1e75095272ef64">lastactivetime</a>  &gt; <a class="code" href="namespace_plugin_thread_pool.html#a73b9ccd0c921d96ca4df9fbc675849c">MAX_IDLETIME</a>)<a name="l00304"></a>00304                 {<a name="l00305"></a>00305                         printf(<span class="stringliteral">"Max time exceeded for this thread\n"</span>);<a name="l00306"></a>00306                         bReleasethis=<span class="keyword">true</span>;<a name="l00307"></a>00307                 }<a name="l00308"></a>00308                 <a name="l00309"></a>00309                 ReleaseMutex(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<a name="l00310"></a>00310                 <span class="keywordflow">return</span> bReleasethis;<a name="l00311"></a>00311 <a name="l00312"></a>00312         }<a name="l00313"></a>00313 <a name="l00314"></a>00314 <a name="l00316"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ec35c45936ab27aacf1f17a49962cbc1">00316</a>         <span class="keywordtype">void</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ec35c45936ab27aacf1f17a49962cbc1">AddRef</a>(){++<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#4048ea61e6e0196ae54cda274410af33">m_ref</a>;}<a name="l00317"></a>00317 <a name="l00318"></a>00318                 <a name="l00319"></a>00319 <a name="l00321"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#0247af1e66ef2aa1152f7b6a81f32753">00321</a>         <span class="keywordtype">void</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#0247af1e66ef2aa1152f7b6a81f32753">Release</a>()<a name="l00322"></a>00322         {<a name="l00323"></a>00323                 --<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#4048ea61e6e0196ae54cda274410af33">m_ref</a>;<a name="l00324"></a>00324                 <span class="keywordflow">if</span>(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#4048ea61e6e0196ae54cda274410af33">m_ref</a> ==0 )<a name="l00325"></a>00325                 {<a name="l00326"></a>00326                         <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>-&gt;DecrementThreadCount();<a name="l00327"></a>00327                         printf(<span class="stringliteral">"Deleting thread id=%d, ThreadCount=%d\n"</span>,<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#c70c7a3540e9cdad3e7eac570df96315">threadId</a>,<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>-&gt;m_threadCount);<a name="l00328"></a>00328                         <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#5f2473093f1e10d70996f855887a94a0">deleteMe</a>=<span class="keyword">true</span>;<a name="l00329"></a>00329                         SetEvent(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#e042b57366986410ca9b29a216f868fb">g_Event</a>); <span class="comment">//delete this object</span><a name="l00330"></a>00330                 }<a name="l00331"></a>00331 <a name="l00332"></a>00332         }<a name="l00333"></a>00333         <a name="l00335"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#f1aefaf34a1103cc7c0538f19db13faf">00335</a>          <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#f1aefaf34a1103cc7c0538f19db13faf">~ThreadChain</a>()<a name="l00336"></a>00336          {<a name="l00337"></a>00337                 <a name="l00338"></a>00338                  printf(<span class="stringliteral">"In ThreadChain dtor=%d\n"</span>,<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#c70c7a3540e9cdad3e7eac570df96315">threadId</a>);<a name="l00339"></a>00339                  <span class="keyword">delete</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#a63566f1062e3846fd000c6ed1d048af">m_winthread</a>;<a name="l00340"></a>00340                  CloseHandle(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#e042b57366986410ca9b29a216f868fb">g_Event</a>);<a name="l00341"></a>00341                  CloseHandle(<a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>);<span class="comment">//ACP test</span><a name="l00342"></a>00342                  printf(<span class="stringliteral">"Releasing-%d\n"</span>,<span class="keyword">this</span>);<a name="l00343"></a>00343                  <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#afa36db14f458aee323676f500e11ec8">next</a>=0;<a name="l00344"></a>00344                  <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>=0;<a name="l00345"></a>00345                  <span class="comment">//printf("Out ThreadChain dtor\n");</span><a name="l00346"></a>00346 <a name="l00347"></a>00347          };<a name="l00348"></a>00348         <a name="l00349"></a>00349 <a name="l00350"></a>00350 <span class="keyword">private</span>:<a name="l00351"></a>00351 <a name="l00354"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#7a86f3702028dcfe97bec05d6152742c">00354</a>         <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#eb53c1e23394b2751909550448fae624">ThreadChain</a>(<span class="keyword">const</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html">ThreadChain</a>&amp;){};<a name="l00355"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#cd7237bdcacc3ab980d3a0d159ce9c36">00355</a>         <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html">ThreadChain</a>&amp; <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#cd7237bdcacc3ab980d3a0d159ce9c36">operator=</a>(<span class="keyword">const</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html">ThreadChain</a>&amp;){};<a name="l00356"></a>00356         <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html">ThreadChain</a>* <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#afa36db14f458aee323676f500e11ec8">next</a>; <a name="l00357"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#7161bcf0e1166fbd59a86f303cb407a5">00357</a>         <span class="keywordtype">bool</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#7161bcf0e1166fbd59a86f303cb407a5">busy</a>;<a name="l00358"></a>00358         <a name="l00359"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#37253f8bdfe3899c4fe09602008b41fb">00359</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#37253f8bdfe3899c4fe09602008b41fb">starttime</a>;<a name="l00360"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#796e3dca1d2286547e1e75095272ef64">00360</a>         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#796e3dca1d2286547e1e75095272ef64">lastactivetime</a>;<a name="l00361"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#a63566f1062e3846fd000c6ed1d048af">00361</a>         CWinThread* <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#a63566f1062e3846fd000c6ed1d048af">m_winthread</a> ;<a name="l00362"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#e042b57366986410ca9b29a216f868fb">00362</a>         HANDLE <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#e042b57366986410ca9b29a216f868fb">g_Event</a>;<a name="l00363"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#4048ea61e6e0196ae54cda274410af33">00363</a>         <span class="keywordtype">int</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#4048ea61e6e0196ae54cda274410af33">m_ref</a>;<a name="l00364"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#c70c7a3540e9cdad3e7eac570df96315">00364</a>         <span class="keywordtype">int</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#c70c7a3540e9cdad3e7eac570df96315">threadId</a>;<a name="l00365"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#5f2473093f1e10d70996f855887a94a0">00365</a>         <span class="keywordtype">bool</span> <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#5f2473093f1e10d70996f855887a94a0">deleteMe</a>;<a name="l00366"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">00366</a>         <a class="code" href="class_plugin_thread_pool_1_1_thread_pool.html">ThreadPool&lt;T&gt;</a>* <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#3dfa3c57d56981eae59af9acbb0ec1b6">threadpool</a>; <a name="l00367"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ab45dae1f910885c22cebaa9f6e7feee">00367</a>         DWORD <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#ab45dae1f910885c22cebaa9f6e7feee">m_timeout</a>;<a name="l00368"></a><a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">00368</a>         HANDLE <a class="code" href="class_plugin_thread_pool_1_1_thread_chain.html#fe31064961fda989ca508ed4cd14294e">threadChkMutex</a>;<a name="l00369"></a>00369 };<a name="l00370"></a>00370 <a name="l00371"></a>00371 }<a name="l00372"></a>00372 <a name="l00373"></a>00373 <a name="l00374"></a>00374 <a name="l00375"></a>00375 <a name="l00376"></a>00376 <span class="preprocessor">#endif </span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun Jan 20 13:16:01 2008 for ThreadPool by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -