📄 chap12_1.htm
字号:
<p ALIGN="JUSTIFY">UINT MyThreadProc( LPVOID pParam )</p>
<p ALIGN="JUSTIFY">{</p>
<p ALIGN="JUSTIFY">CMyObject* pObject = (CMyObject*)pParam;</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">if (pObject == NULL ||</p>
<p ALIGN="JUSTIFY">!pObject->IsKindOf(RUNTIME_CLASS(CMyObject)))</p>
<p ALIGN="JUSTIFY">return -1; // </font><font SIZE="3">非法参数</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">// </font><font SIZE="3">用</font><font FACE="Times New Roman" SIZE="3">pObject</font><font SIZE="3">对象来完成某项工作</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">return 0; // </font><font SIZE="3">线程正常结束</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">}</p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY">AfxBeginThread</font><font SIZE="3">的声明为:</p>
<blockquote>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CWinThread*
AfxBeginThread( AFX_THREADPROC pfnThreadProc, LPVOID pParam, int nPriority =
THREAD_PRIORITY_NORMAL, UINT nStackSize = 0, DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );</font></p>
</blockquote>
</blockquote>
</blockquote>
<p><font SIZE="3"> </p>
<p ALIGN="JUSTIFY">参数</font><font FACE="Times New Roman" SIZE="3">pfnThreadProc</font><font SIZE="3">是工作线程函数的地址。</font><font FACE="Times New Roman" SIZE="3">pParam</font><font SIZE="3">是传递给线程函数的参数。</font><font FACE="Times New Roman" SIZE="3">nPriority</font><font SIZE="3">是线程的优先级,一般是</font><font FACE="Times New Roman" SIZE="3">THREAD_PRIORITY_NORMAL</font><font SIZE="3">,若为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">,则使用创建线程的优先级。</font><font FACE="Times New Roman" SIZE="3">nStackSize</font><font SIZE="3">说明了线程的堆栈尺寸,若为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">则堆栈尺寸与创建线程相同。</font><font FACE="Times New Roman" SIZE="3">dwCreateFlags</font><font SIZE="3">指定了线程的初始状态,如果为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">,那么线程在创建后立即执行,如果为</font><font FACE="Times New Roman" SIZE="3">CREATE_SUSPENDED</font><font SIZE="3">,则线程在创建后就被挂起。参数</font><font FACE="Times New Roman" SIZE="3">lpSecurityAttrs</font><font SIZE="3">用来说明保密属性,一般为</font><font FACE="Times New Roman" SIZE="3">0</font><font SIZE="3">。函数返回新建的</font><font FACE="Times New Roman" SIZE="3">CWinThread</font><font SIZE="3">对象的指针。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">程序应该把</font><font FACE="Times New Roman" SIZE="3">AfxBeginThread</font><font SIZE="3">返回的</font><font FACE="Times New Roman" SIZE="3">CWinThread</font><font SIZE="3">指针保存起来,以便对创建的线程进行控制。例如,可以调用</font><font FACE="Times New Roman" SIZE="3">CWinThread::SetThreadPriority</font><font SIZE="3">来设置线程的优先级,用</font><font FACE="Times New Roman" SIZE="3">CWinThread::SuspendThread</font><font SIZE="3">来挂起线程。如果线程被挂起,那么直到调用</font><font FACE="Times New Roman" SIZE="3">CWinThread::ResumeThread</font><font SIZE="3">后线程才开始运行。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">如果要创建用户界面线程,那么必须从</font><font FACE="Times New Roman" SIZE="3">CWinThread</font><font SIZE="3">派生一个新类。事实上,代表进程主线程的</font><font FACE="Times New Roman" SIZE="3">CWinApp</font><font SIZE="3">类就是</font><font FACE="Times New Roman" SIZE="3">CWinThread</font><font SIZE="3">的派生类。派生类必须用</font><font FACE="Times New Roman" SIZE="3">DECLARE_DYNCREATE</font><font SIZE="3">和</font><font FACE="Times New Roman" SIZE="3">IMPLEMENT_DYNCREATE</font><font SIZE="3">宏来声明和实现。需要重写派生类的</font><font FACE="Times New Roman" SIZE="3">InitInstance</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">ExitInstance</font><font SIZE="3">、</font><font FACE="Times New Roman" SIZE="3">Run</font><font SIZE="3">等函数。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">可以使用</font><font FACE="Times New Roman" SIZE="3">AfxBeginThread</font><font SIZE="3">函数的另一个版本来创建用户界面线程。函数的声明为:</p>
<blockquote>
<blockquote>
<blockquote>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">CWinThread*
AfxBeginThread( CRuntimeClass* pThreadClass, int nPriority = THREAD_PRIORITY_NORMAL, UINT
nStackSize = 0, DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL );</font></p>
</blockquote>
</blockquote>
</blockquote>
<p><font SIZE="3"> </p>
<p ALIGN="JUSTIFY">参数</font><font FACE="Times New Roman" SIZE="3">pThreadClass</font><font SIZE="3">指向一个</font><font FACE="Times New Roman" SIZE="3">CRuntimeClass</font><font SIZE="3">对象,该对象是用</font><font FACE="Times New Roman" SIZE="3">RUNTIME_CLASS</font><font SIZE="3">宏从</font><font FACE="Times New Roman" SIZE="3">CWinThread</font><font SIZE="3">的派生类创建的。其它参数以及函数的返回值与第一个版本的</font><font FACE="Times New Roman" SIZE="3">AfxBeginThread</font><font SIZE="3">是一样的。</font><font FACE="Times New Roman" SIZE="3"></p>
<p ALIGN="JUSTIFY"></font><font SIZE="3">当发生下列事件之一时,线程被终止:</p>
<blockquote>
<blockquote>
<p ALIGN="JUSTIFY">线程调用</font><font FACE="Times New Roman" SIZE="3">ExitThread</font><font SIZE="3">。</p>
<p ALIGN="JUSTIFY">线程函数返回,即线程隐含调用了</font><font FACE="Times New Roman" SIZE="3">ExitThread</font><font SIZE="3">。</p>
</font><font FACE="Times New Roman" SIZE="3"><p ALIGN="JUSTIFY">ExitProcess</font><font SIZE="3">被进程的任一线程显示或隐含调用。</p>
<p ALIGN="JUSTIFY">用线程的句柄调用</font><font FACE="Times New Roman" SIZE="3">TerminateThread</font><font SIZE="3">。</p>
<p ALIGN="JUSTIFY">用进程句柄调用</font><font FACE="Times New Roman" SIZE="3">TerminateProcess</font><font SIZE="3">。</p>
</font>
</blockquote>
</blockquote>
<div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
<tr>
<td><a href="chap12.htm">上一页</a></td>
<td><p align="right"><a href="chap12_2.htm">下一页</a></td>
</tr>
</table>
</center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
<p align="center"></font><font size="2" color="#000000">本教程由<a href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
未经许可,请勿以任何形式复制</font></td>
<b>
</tr>
</table>
</center></div>
<p ALIGN="CENTER"></b><font SIZE="5"> </font><font FACE="Times New Roman" SIZE="5"></p>
</font><font FACE="Times New Roman" SIZE="3">
<p></font><b><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
</font></b>
<p><font SIZE="3"> </font><font FACE="Times New Roman" SIZE="3"></p>
<p></font> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -