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

📄 threadpool_8h-source.html

📁 CMPP 客户端接口API 符合中国移动CMPP3.0 2.0 适用于SP端客户端的开发
💻 HTML
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=gb2312"><title>cmpp3api: threadpool.h源文件</title><link href="doxygen.css" rel="stylesheet" type="text/css"><link href="tabs.css" rel="stylesheet" type="text/css"></head><body><!-- 制作者 Doxygen 1.5.1-p1 --><div class="tabs">  <ul>    <li><a href="main.html"><span>首页</span></a></li>    <li><a href="annotated.html"><span>类</span></a></li>    <li id="current"><a href="files.html"><span>文件</span></a></li>  </ul></div><div class="tabs">  <ul>    <li><a href="files.html"><span>文件列表</span></a></li>    <li><a href="globals.html"><span>文件成员</span></a></li>  </ul></div><h1>threadpool.h</h1><a href="threadpool_8h.html">浏览该文件的文档。</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <a name="l00014"></a>00014 <span class="preprocessor">#ifndef _SMAL_THREADPOOL_H</span><a name="l00015"></a>00015 <span class="preprocessor"></span><span class="preprocessor">#define _SMAL_THREADPOOL_H</span><a name="l00016"></a>00016 <span class="preprocessor"></span><a name="l00017"></a>00017 <span class="preprocessor">#include &lt;<a class="code" href="smal_8h.html">smal.h</a>&gt;</span><a name="l00018"></a>00018 <a name="l00019"></a><a class="code" href="struct_i_job_desc.html">00019</a> <span class="keyword">struct </span><a class="code" href="struct_i_job_desc.html">IJobDesc</a><a name="l00020"></a>00020 {<a name="l00021"></a>00021 };<a name="l00022"></a>00022 <a name="l00023"></a><a class="code" href="struct_i_worker.html">00023</a> <span class="keyword">struct </span><a class="code" href="struct_i_worker.html">IWorker</a><a name="l00024"></a>00024 {<a name="l00025"></a>00025         <span class="keyword">virtual</span> <span class="keywordtype">void</span> <a class="code" href="struct_i_worker.html#f537f4fc6121564bb67e3c79a3091be8">ProcessJob</a>(<a class="code" href="struct_i_job_desc.html">IJobDesc</a>* pJob)=0;<a name="l00026"></a>00026 };<a name="l00027"></a>00027 <a name="l00028"></a>00028 <a name="l00029"></a><a class="code" href="struct_thread_info.html">00029</a> <span class="keyword">struct </span><a class="code" href="struct_thread_info.html">ThreadInfo</a><a name="l00030"></a>00030 {<a name="l00031"></a><a class="code" href="struct_thread_info.html#97a43768f1ffde24877f9f15d5228871">00031</a>         DWORD <a class="code" href="struct_thread_info.html#97a43768f1ffde24877f9f15d5228871">m_pThreadId</a>;<a name="l00032"></a><a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">00032</a>         HANDLE <a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">m_hThread</a>;<a name="l00033"></a><a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">00033</a>         <span class="keywordtype">bool</span>    <a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">m_bBusyWorking</a>;<a name="l00034"></a><a class="code" href="struct_thread_info.html#0c75aec7a6d8253572c24ecb89c011d1">00034</a>         <a class="code" href="struct_thread_info.html#0c75aec7a6d8253572c24ecb89c011d1">ThreadInfo</a>() { <a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">m_hThread</a>=0; <a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">m_bBusyWorking</a>=<span class="keyword">false</span>; }<a name="l00035"></a><a class="code" href="struct_thread_info.html#da66e21527299ab0b0f39aea0b98f0f4">00035</a>         <a class="code" href="struct_thread_info.html#0c75aec7a6d8253572c24ecb89c011d1">ThreadInfo</a>(HANDLE handle, <span class="keywordtype">bool</span> bBusy) { <a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">m_hThread</a>=handle; <a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">m_bBusyWorking</a>=bBusy; }<a name="l00036"></a><a class="code" href="struct_thread_info.html#ff0806e523b03b1d16c3fe99b0ea3ffd">00036</a>         <a class="code" href="struct_thread_info.html#0c75aec7a6d8253572c24ecb89c011d1">ThreadInfo</a>(<span class="keyword">const</span> <a class="code" href="struct_thread_info.html">ThreadInfo</a>&amp; info) { <a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">m_hThread</a>=info.<a class="code" href="struct_thread_info.html#4432d6971ff2d5574ca78fb0baf6d1b5">m_hThread</a>; <a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">m_bBusyWorking</a>=info.<a class="code" href="struct_thread_info.html#f56c46f016ce62116d831aaf208b8b45">m_bBusyWorking</a>; }<a name="l00037"></a>00037 };<a name="l00038"></a>00038 <a name="l00039"></a>00039 <a name="l00040"></a><a class="code" href="class_c_thread_pool.html">00040</a> <span class="keyword">class </span><a class="code" href="class_c_thread_pool.html">CThreadPool</a>  <a name="l00041"></a>00041 {<a name="l00042"></a>00042         <span class="keyword">friend</span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_c_thread_pool.html#4891cd33bb7c490dfd1c4bb766c2377b">CThreadPool::ManagerProc</a>(<span class="keywordtype">void</span>* p); <a name="l00043"></a>00043         <span class="keyword">friend</span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_c_thread_pool.html#449f322aaa87df2766d3a2feded6b626">CThreadPool::WorkerProc</a>(<span class="keywordtype">void</span>* p);<a name="l00044"></a>00044 <span class="keyword">protected</span>:<a name="l00045"></a><a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e44">00045</a>         <span class="keyword">enum</span> <a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e44">ThreadPoolStatus</a> { <a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e44e966b9ae416e40c92f354941d73cfa13">BUSY</a>, <a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e44a329efa7d2ef0aacd96f806bd9a56577">IDLE</a>, <a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e444c580b4cecf074b58ed423170bb6808d">NORMAL</a> };<a name="l00046"></a>00046 <span class="keyword">public</span>:<a name="l00047"></a>00047         <span class="comment">//interface to the outside</span><a name="l00048"></a>00048         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#66aed95042182184c2db963b0a4da111">Start</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nStatic, <span class="keywordtype">unsigned</span> <span class="keywordtype">short</span> nmax);<a name="l00049"></a>00049         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#b33a8b0ae934bf438de2390604401cb0">Stop</a>(<span class="keywordtype">bool</span> bHash=<span class="keyword">false</span>);<a name="l00050"></a>00050         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#c50e0ad426966495910eaf91b08014a8">ProcessJob</a>(<a class="code" href="struct_i_job_desc.html">IJobDesc</a>* pJob, <a class="code" href="struct_i_worker.html">IWorker</a>* pWorker) <span class="keyword">const</span>;<a name="l00051"></a>00051 <a name="l00052"></a>00052         <span class="comment">//constructor and destructor</span><a name="l00053"></a>00053         <a class="code" href="class_c_thread_pool.html#d782c35d603373734182289680d146c6">CThreadPool</a>();<a name="l00054"></a>00054         <span class="keyword">virtual</span> <a class="code" href="class_c_thread_pool.html#cb6a395b0928bd2472801b0d9ac8b3c0">~CThreadPool</a>();<a name="l00055"></a>00055 <a name="l00056"></a>00056 <span class="keyword">protected</span>:<a name="l00057"></a>00057         <span class="comment">//interfaces public:</span><a name="l00058"></a><a class="code" href="class_c_thread_pool.html#211a76b12e735223052dfd39798d916e">00058</a>         HANDLE <a class="code" href="class_c_thread_pool.html#211a76b12e735223052dfd39798d916e">GetMgrIoPort</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_c_thread_pool.html#a63f27ba07c1d5b7af98e0427b592cf3">m_hMgrIoPort</a>; }<a name="l00059"></a><a class="code" href="class_c_thread_pool.html#9590db4a94c6264292e405f0f3b3fc65">00059</a>         UINT <a class="code" href="class_c_thread_pool.html#9590db4a94c6264292e405f0f3b3fc65">GetMgrWaitTime</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1000*60; } <span class="comment">//1 minute</span><a name="l00060"></a><a class="code" href="class_c_thread_pool.html#133c43086875d2ab78036ff76179eec2">00060</a>         HANDLE <a class="code" href="class_c_thread_pool.html#133c43086875d2ab78036ff76179eec2">GetWorkerIoPort</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="class_c_thread_pool.html#7e17984c77d1dfd20162b014aeb1caa1">m_hWorkerIoPort</a>; }<a name="l00061"></a>00061 <a name="l00062"></a>00062 <span class="keyword">private</span>:<a name="l00063"></a>00063         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_c_thread_pool.html#4891cd33bb7c490dfd1c4bb766c2377b">ManagerProc</a>(<span class="keywordtype">void</span>* p);<a name="l00064"></a>00064         <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="class_c_thread_pool.html#449f322aaa87df2766d3a2feded6b626">WorkerProc</a>(<span class="keywordtype">void</span>* p);<a name="l00065"></a>00065 <span class="keyword">protected</span>:<a name="l00066"></a>00066         <span class="comment">//manager thread</span><a name="l00067"></a><a class="code" href="class_c_thread_pool.html#a8b4ceabf090930b3d3003d7487973a3">00067</a>         HANDLE <a class="code" href="class_c_thread_pool.html#a8b4ceabf090930b3d3003d7487973a3">m_hMgrThread</a>;<a name="l00068"></a><a class="code" href="class_c_thread_pool.html#a63f27ba07c1d5b7af98e0427b592cf3">00068</a>         HANDLE <a class="code" href="class_c_thread_pool.html#a63f27ba07c1d5b7af98e0427b592cf3">m_hMgrIoPort</a>;<a name="l00069"></a>00069 <span class="keyword">protected</span>:<a name="l00070"></a>00070         <span class="comment">//configuration parameters</span><a name="l00071"></a><a class="code" href="class_c_thread_pool.html#261943984797e12df4db2287f0349a99">00071</a>         <span class="keyword">mutable</span> UINT <a class="code" href="class_c_thread_pool.html#261943984797e12df4db2287f0349a99">m_nNumberOfStaticThreads</a>;<a name="l00072"></a><a class="code" href="class_c_thread_pool.html#a602d3abd1256cd3bcfb144cf7c139bc">00072</a>         <span class="keyword">mutable</span> UINT <a class="code" href="class_c_thread_pool.html#a602d3abd1256cd3bcfb144cf7c139bc">m_nNumberOfTotalThreads</a>;<a name="l00073"></a>00073 <a name="l00074"></a>00074 <span class="keyword">protected</span>:<a name="l00075"></a>00075         <span class="comment">//helper functions</span><a name="l00076"></a>00076         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#0b09452c70390003bb457d7429178260">AddThreads</a>();<a name="l00077"></a>00077         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#2ea3c73bf92832192cdd0c4901abe8df">RemoveThreads</a>();<a name="l00078"></a>00078         <a class="code" href="class_c_thread_pool.html#0bacfbb0688c2cf8ec70aa704cf94e44">ThreadPoolStatus</a> <a class="code" href="class_c_thread_pool.html#390dd6bb203634e9c7c855494e6a1470">GetThreadPoolStatus</a>();<a name="l00079"></a>00079         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#1a7eefd03f1982ed78bbd97ccfc10f16">ChangeStatus</a>(DWORD threadId, <span class="keywordtype">bool</span> status);<a name="l00080"></a><a class="code" href="class_c_thread_pool.html#81bd2096c3f6b63f49968b9df24cae45">00080</a>         <span class="keywordtype">void</span> <a class="code" href="class_c_thread_pool.html#81bd2096c3f6b63f49968b9df24cae45">RemoveThread</a>(DWORD threadId)<a name="l00081"></a>00081         {<a name="l00082"></a>00082                 CSingleLock lock(&amp;<a class="code" href="class_c_thread_pool.html#a013af10c9ca27fba4e87b6097d38eac">m_arrayCs</a>);<a name="l00083"></a>00083                 lock.Lock();<a name="l00084"></a>00084                 <a class="code" href="class_c_thread_pool.html#bd8adc284ceaee4a6780ef37108cf1a9">m_threadMap</a>.RemoveKey(threadId);<a name="l00085"></a>00085                 lock.Unlock();<a name="l00086"></a>00086         }<a name="l00087"></a>00087 <a name="l00088"></a>00088 <span class="keyword">protected</span>:<a name="l00089"></a>00089         <span class="comment">//all the work threads</span><a name="l00090"></a><a class="code" href="class_c_thread_pool.html#bd8adc284ceaee4a6780ef37108cf1a9">00090</a>         CMap&lt;DWORD, DWORD&amp;, ThreadInfo, ThreadInfo&amp;&gt; <a class="code" href="class_c_thread_pool.html#bd8adc284ceaee4a6780ef37108cf1a9">m_threadMap</a>;<a name="l00091"></a><a class="code" href="class_c_thread_pool.html#a013af10c9ca27fba4e87b6097d38eac">00091</a>         CCriticalSection <a class="code" href="class_c_thread_pool.html#a013af10c9ca27fba4e87b6097d38eac">m_arrayCs</a>;<a name="l00092"></a><a class="code" href="class_c_thread_pool.html#7e17984c77d1dfd20162b014aeb1caa1">00092</a>         HANDLE <a class="code" href="class_c_thread_pool.html#7e17984c77d1dfd20162b014aeb1caa1">m_hWorkerIoPort</a>;<a name="l00093"></a>00093 };<a name="l00094"></a>00094 <a name="l00095"></a>00095 <a name="l00096"></a>00096 <span class="preprocessor">#endif</span></pre></div><hr size="1"><address style="align: right;"><small>Generated at Sat May 19 16:03:55 2007 for cmpp3api by&nbsp;<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1-p1 </small></address></body></html>

⌨️ 快捷键说明

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