﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-长寿梦的cppblog-文章分类-Windows编程总结</title><link>http://www.cppblog.com/changshoumeng/category/12898.html</link><description>键盘为琴，代码作曲，
悠悠，是我的心，
在为你弹奏

从main开始，无限循环，
无限等待，唯你
是我的常量
</description><language>zh-cn</language><lastBuildDate>Tue, 18 May 2010 07:29:33 GMT</lastBuildDate><pubDate>Tue, 18 May 2010 07:29:33 GMT</pubDate><ttl>60</ttl><item><title>如何改变对话框的背景颜色</title><link>http://www.cppblog.com/changshoumeng/articles/115559.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sun, 16 May 2010 23:53:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115559.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115559.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115559.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115559.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115559.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center" align=center><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如何改变对话框的背景颜色</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br></span></strong><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">----</span><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'"> </span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">方法一：调用</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'">CWinApp</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">类的成员函数</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'">SetDialogBkColor</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">来实现。</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'"><br></span></strong><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">其中函数的第一个参数指定了<span style="COLOR: red">背景颜色</span>，第二个参数指定了<span style="COLOR: red">文本颜色</span>。</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">下面的例子是将应用程序对话框设置为蓝色背景和红色文本，步骤如下：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">①</span><span style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"> </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">新建一个基于</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">Dialog</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">的</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">MFC AppWizard</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">应用程序</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">ExampleDlg</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">。</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">②</span><span style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"> </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">在</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">CExampleDlgApp ::InitInstance()</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">中添加如下代码：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>BOOL CExampleDlgApp: : InitInstance ( )<br>{ <br></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast">&#8230;</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>&nbsp; &nbsp; &nbsp; &nbsp; CExampleDlgDlg dlg; <br>&nbsp; &nbsp; &nbsp; &nbsp; m_pMainWnd = &amp;dlg; <br><br>//</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">先于</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">DoModal()</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">调用，将对话框设置为蓝色背景、红色文本</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>&nbsp; &nbsp; &nbsp;<span style="COLOR: blue"> &nbsp; SetDialogBkColor(RGB(0,0,255),RGB(255,0,0)); <br></span>&nbsp; &nbsp; &nbsp; &nbsp; int nResponse = dlg.DoModal(); <br></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast">&#8230;</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>} <br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">编译并运行，此时对话框的背景色和文本色已发生了改变。值得注意的是<span style="COLOR: red">：在调用</span></span><span lang=EN-US style="COLOR: red; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">DoModal()</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">之前必须先调用</span><span lang=EN-US style="COLOR: red; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">SetDialogBkColor</span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">，且此方法是将改变应用程序中所有的对话框颜色，并不能针对某一个指定的对话框。</span><span lang=EN-US style="COLOR: red; FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="COLOR: red; FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'">---- </span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">方法二：重载</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'">OnPaint()</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">，即</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'">WM_PAINT</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 黑体">消息。有关代码如下（以上例工程为准）：</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 黑体; mso-hansi-font-family: 'Times New Roman'"><br></span></strong><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>void CExampleDlgDlg::OnPaint()<br>{ <br>&nbsp; &nbsp; &nbsp; &nbsp; if (IsIconic())<br></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast">&#8230;</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>else<br>{ <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="COLOR: #000099"> CRect rect; <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CPaintDC dc(this); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GetClientRect(rect); <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dc.FillSolidRect(rect,RGB(0,255,0)); //</span></span><span style="COLOR: #000099; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">设置为绿色背景</span><span lang=EN-US style="COLOR: #000099; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br></span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CDialog::OnPaint(); <br>} <br><br><br><strong style="mso-bidi-font-weight: normal">---- </strong></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">方法三：重载</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor)</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">，即</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">WM_CTLCOLOR</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">消息。</span></strong><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">具体步骤如下（以上例工程为准）：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">①在</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">CExampleDlgDlg</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">的头文件中，添加一</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">CBrush</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">的成员变量：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>class CExampleDlgDlg : public CDialog<br>{ <br>...<br>protected:<br><span style="COLOR: #000099">CBrush m_brush; <br></span>...<br>} ; <br><br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">②在</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">OnInitDialog()</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">函数中添加如下代码：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>BOOL CExampleDlgDlg::OnInitDialog()<br>{ <br>...<br>// TODO: Add extra initialization here<br><span style="COLOR: #000099">m_brush.CreateSolidBrush(RGB(0, 255, 0)); // </span></span><span style="COLOR: #000099; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">生成一绿色刷子</span><span lang=EN-US style="COLOR: #000099; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br></span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">...<br>} <br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">③利用</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">ClassWizard</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">重载</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">OnCtlColor(</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast">&#8230;</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">)</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">，即</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">WM_CTLCOLOR</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">消息：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>HBRUSH CExampleDlgDlg::OnCtlColor<br>(CDC* pDC, CWnd* pWnd, UINT nCtlColor)<br>{ <br>/*<br>** </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">这里不必编写任何代码！</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>**</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">下行代码要注释掉</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>** HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); <br>*/<br><br><span style="COLOR: #000099">return m_brush; //</span></span><span style="COLOR: #000099; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">返加绿色刷子</span><span lang=EN-US style="COLOR: #000099; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br></span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">} <br><br><br><strong style="mso-bidi-font-weight: normal">---- </strong></span><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">方法四：还是重载</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">OnCtlColor (CDC* pDC, CWnd* pWnd, UINT nCtlColor)</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">，即</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">WM_CTLCOLOR</span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">消息</span></strong><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">。</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-hansi-font-family: Calibri; mso-bidi-font-family: 'Times New Roman'; mso-hansi-theme-font: minor-latin; mso-bidi-theme-font: minor-bidi"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">具体步骤如下（以上例工程为准）：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">步骤①、②同上方法三中的步骤①、②。</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">步骤③利用</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">ClassWizard</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">重载</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">OnCtlColor(</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: 'Times New Roman'; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast">&#8230;</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">)</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（即</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">WM_CTLCOLOR</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">消息）时则有些不同：</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br><br>HBRUSH CExampleDlgDlg::OnCtlColor<br>(CDC* pDC, CWnd* pWnd, UINT nCtlColor)<br>{ <br><span style="COLOR: #000099">HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); <br><br>//</span></span><span style="COLOR: #000099; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">在这加一条是否为对话框的判断语句</span><span lang=EN-US style="COLOR: #000099; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>if(nCtlColor ==CTLCOLOR_DLG)<br>return m_brush; //</span><span style="COLOR: #000099; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">返加绿色刷子</span><span lang=EN-US style="COLOR: #000099; FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>return hbr; </span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>} <br><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">编译并运行即可。</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><br>---- </span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">关于如何改变对话框背景颜色的问题，可能还有很多种不同方法可以实现，笔者在这仅举出四种常见的方法。其中方法三的编程似乎有点不太规范，方法四则要比方法三正统些，笔者这样的对比举例是为了拓宽</span><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi">VC</span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">编程爱好者特别是初学者的编程思路，</span><span style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"> <span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p>&nbsp;</o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US style="FONT-FAMILY: 'Times New Roman','serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/115559.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-17 07:53 <a href="http://www.cppblog.com/changshoumeng/articles/115559.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MFC多线程有关总结</title><link>http://www.cppblog.com/changshoumeng/articles/115442.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 15 May 2010 03:40:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115442.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115442.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115442.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115442.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: MFC多线程&nbsp;1&nbsp; .MFC 对 多 线 程 的 支 持 MFC 类 库 提 供 了 多 线 程 编 程 支 持， 对 于 用 户编 程 实 现 来 说 更 加 方 便。 非 常 重 要 的 一 点 就 是， 在 多 窗 口 线 程 情 况 下，MFC 直 接 提 供 了 用 户 接 口线 程 的 设 计。 MFC 区 分 两 种 类 型 的 线 程： 辅 助 ...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/115442.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-15 11:40 <a href="http://www.cppblog.com/changshoumeng/articles/115442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第三章   快跑和等待</title><link>http://www.cppblog.com/changshoumeng/articles/115266.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 13 May 2010 02:51:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115266.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115266.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115266.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115266.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第三章&nbsp;&nbsp; 快跑和等待资源网络收集 感谢原创者转自http://blog.sina.com.cn/s/blog_5678943c0100d4po.html本章回答了如下几个问题：&nbsp; ◆&nbsp;如何等待线程序的结束？为什么通过查询方式判断线程是否终止是&#8220;看似空闲实则忙碌&#8221;？这有何不妥？怎样改进，才能使等待变得有效率起来？&...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/115266.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-13 10:51 <a href="http://www.cppblog.com/changshoumeng/articles/115266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第二章   线程的第一次接触</title><link>http://www.cppblog.com/changshoumeng/articles/115262.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 13 May 2010 02:30:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115262.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115262.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115262.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115262.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115262.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 第二章&nbsp; &nbsp;线程的第一次接触资源网络收集 感谢原创者转自http://blog.sina.com.cn/s/blog_5678943c0100d4po.html本章回答了如下几个问题：&nbsp; ◆&nbsp;怎样建立一个线程？怎样终止一个线程？线程的退出码如何获取？&nbsp; ◆&nbsp;使用多线程容易引起怎样的问题？如何解决？&nbsp; ◆&...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/115262.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/115262.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-13 10:30 <a href="http://www.cppblog.com/changshoumeng/articles/115262.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>第一章  为什么要“千头万绪”</title><link>http://www.cppblog.com/changshoumeng/articles/115261.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 13 May 2010 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115261.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115261.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115261.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115261.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115261.html</trackback:ping><description><![CDATA[<p class=MsoListParagraph style="MARGIN: 0cm 0cm 0pt 44.25pt; TEXT-INDENT: -44.25pt; LINE-HEIGHT: 15pt; TEXT-ALIGN: center; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-char-indent-count: 0; mso-outline-level: 2; mso-list: l0 level1 lfo1" align=center><span lang=EN-US style="FONT-SIZE: 13.5pt; COLOR: #494949; FONT-FAMILY: '微软雅黑','sans-serif'; mso-bidi-font-family: 微软雅黑; mso-font-kerning: 0pt"><span style="mso-list: Ignore">第一章<span style="FONT: 7pt 'Times New Roman'">&nbsp; </span></span></span><span style="FONT-SIZE: 13.5pt; COLOR: #494949; FONT-FAMILY: '微软雅黑','sans-serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt">为什么要&#8220;千头万绪&#8221;<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">资源网络收集</span><font face=Calibri> </font><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">感谢原创者</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: right" align=right><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">转自</span><span lang=EN-US><font face=Calibri>http://blog.sina.com.cn/s/blog_5678943c0100d4po.html</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">本章回答了如下几个问题：</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 楷体_GB2312; mso-fareast-font-family: 楷体_GB2312">&nbsp;</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">◆ 什么是多任务操作系统？多任务操作系统有哪些类型？它们有何区别？</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 楷体_GB2312; mso-fareast-font-family: 楷体_GB2312">&nbsp;</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">◆ 为什么要使用多线程呢？为什么不使用多进程？线程、进程，它们到底是什么样的东东？</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 楷体_GB2312; mso-fareast-font-family: 楷体_GB2312">&nbsp;</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">◆ 多线程是如何实现的？线程是如何切换的？效率怎样？</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: 楷体_GB2312; mso-fareast-font-family: 楷体_GB2312">&nbsp;</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> </span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 楷体_GB2312; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">◆ 多线程设计是如此的诱人，难道什么代价也不用付出？怎样才能很好地进行多线程设计呢？</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;<o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">合作型</span></strong><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">[cooperative]</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">多任务和抢先式</span></strong><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">[preemptive]</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">多任务有何不同？</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">两者的最大区别是<span style="BACKGROUND: lime; mso-highlight: lime">谁来把握</span></span><span lang=EN-US style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-fareast-font-family: 宋体">CPU</span><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">的分享</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">。前者由程序员的</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&#8220;</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">举止良好</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&#8221;</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">才可做到，后者则由操作系统决定，可以强迫应用程序把</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">分享给别人。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Microsoft Windows</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">的前三个版本（</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">1</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">、</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">2</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">、</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">3</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）属于合作型多任务操作系统，</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Windows4.0</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">（即</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Windows</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">95</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">后均属于强先式多任务操作系统。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">记住：一个永远有反映的</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">UI</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">（</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">User Interface</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）是很重要的。</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">线程和进程有何不同？</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">从</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Win32</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">的角度看，<span style="BACKGROUND: lime; mso-highlight: lime">进程拥有内存和资源。</span></span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">资源则包括核心对象（如文件句柄和线程）、用户资源（如对话框和字符串）、</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">GDI</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">资源（如</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Device Context</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">和</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">brushes</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）。</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">进程本身并不能够执行，它只是提供一个安置内存和线程的地方。</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">（进程就是一大堆对象的拥有权的集合。也就是说，进程可以拥有内存上下文、文件句柄、线程及一大串</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">DLL</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">模块（被载入到这一进程地址空间中）。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">进程和内存并没有真正</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&#8220;</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">做</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&#8221;</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">什么事情。<span style="BACKGROUND: lime; mso-highlight: lime">一旦</span></span><span lang=EN-US style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-fareast-font-family: 宋体">CPU</span><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">开始执行代码，你就拥有了一个</span><span lang=EN-US style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-fareast-font-family: 宋体">&#8220;</span><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">线程</span><span lang=EN-US style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-fareast-font-family: 宋体">&#8221;</span><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">。在同一时间同一进程，你可以拥有一大把线程，执行同一段代码</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">为什么不使用多个进程？</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">较之进程，线程轻便、价廉，启动速度快，退出比较快，对系统资源的冲击比较小。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">如果使用多进程，最困难的问题是如何把窗口句柄交给另一个进程。在</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Win32</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">中，句柄只在其诞生地（进程中）才有意义。这是一种安全警戒，避免某个进程有意无意地危及到另一个进程的资源。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">为了分享窗口句柄，你必须明明白白地产生该句柄的一个副本，并且可以被其他进程使用。在一个多线程程序中，所有线程都可以使用这个窗口的句柄</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">，因为句柄和线程生活在同一个进程中</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">如果两个线程分属不同的进程，那它们通常没有办法共享任何内存。不同<span style="BACKGROUND: lime; mso-highlight: lime">进程间如果要通讯</span>，唯有依赖特别的设计，使之拥有共享内存（</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">shared memory</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">如果<span style="BACKGROUND: lime; mso-highlight: lime">两线程属于同一进程，它们将共享所有的内存（包括全局变量、静态变量</span>）。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Context Switching</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">及</span></strong><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Context Switch</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">效率</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">要切换不同的线程，操作系统应先切换该线程所隶属之进程的内存，然后恢复该线程存放在</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CONTEXT</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">结构中的寄存器值。此过程称为</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">context switch</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">注：</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CONTEXT</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">结构中保存了该线程上次被打断时线程当时的状态，也就是</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">内所有寄存器的内容。</span><span lang=EN-US style="COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">当然，天下没有免费的午餐，线程切换时都要缴点效率税金。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">对于单</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">而言，抢先式多任务使电脑看起来可以同时处理多个任务。但微观上看，任一时刻，</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">只能做一件事。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">多</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">的好处是，</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">CPU</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">越多，就有越多线程可以同时执行，不需要</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">context switch</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">，从而提高了系统效率。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">竞争条件（</span></strong><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Race Conditions</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）和<span style="BACKGROUND: lime; mso-highlight: lime">原子操作</span>（</span></strong><strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">Atomic Operations</span></strong><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">）</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">注意在多任务操作系统中，<span style="BACKGROUND: lime; mso-highlight: lime">一条</span></span><span lang=EN-US style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-fareast-font-family: 宋体">C</span><span style="BACKGROUND: lime; COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-highlight: lime; mso-ascii-font-family: simsun">指令一定可以安全执行完毕</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">，而不在乎</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">context switch</span><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">是否发生。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体">&nbsp;</span><strong><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">好消息与坏消息</span></strong><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 3.75pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">使用线程并非没有代价。<span style="BACKGROUND: lime; mso-highlight: lime">采用多线程设计往往会加大程序设计的复杂性，</span>必须做到小心精心安排，才能实现预期目标。</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto" align=left><span style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-hansi-font-family: simsun; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-ascii-font-family: simsun">成功的秘诀是小心地规划：谁要什么？何时要？怎么要？</span><span lang=EN-US style="COLOR: #494949; LINE-HEIGHT: 150%; FONT-FAMILY: 'simsun','serif'; mso-bidi-font-family: 宋体; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt; mso-fareast-font-family: 宋体"><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/115261.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-13 10:28 <a href="http://www.cppblog.com/changshoumeng/articles/115261.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>进程、线程概念性问题</title><link>http://www.cppblog.com/changshoumeng/articles/115252.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Thu, 13 May 2010 01:19:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/115252.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/115252.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/115252.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/115252.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/115252.html</trackback:ping><description><![CDATA[<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; TEXT-ALIGN: center; mso-para-margin-bottom: 1.0gd" align=center><span style="FONT-SIZE: 12pt; FONT-FAMILY: 黑体">进程、线程概念性问题<span lang=EN-US><o:p></o:p></span></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">任务概念</span></strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>task</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）</span><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 0pt"><span lang=EN-US><span style="mso-tab-count: 1"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">任务是由软件完成的一个活动，<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span style="COLOR: red">是一系列达到某种共同目的的操作</span></em></strong>。一个任务既可以由一个进程实现，也可以作为一个线程来实现。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><o:p><font face=Calibri>&nbsp;</font></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">进程概念</span></strong><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><font face=Calibri>&nbsp;</font></span></strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>process</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）</span><strong style="mso-bidi-font-weight: normal"><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">　<strong style="mso-bidi-font-weight: normal">　<em style="mso-bidi-font-style: normal"><span style="COLOR: red">进程是表示资源分配的基本单位</span></em>，</strong>又是调度运行的基本单位。例如，用户运行自己的程序，系统就创建一个进程，并为它分配资源，包括各种表格、内存空间、磁盘空间、</span><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><font face=Calibri>I</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">／</span><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><font face=Calibri>O</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">设备等。然后，把该进程放人进程的就绪队列。进程调度程序选中它，为它分配</span><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><font face=Calibri>CPU</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-bidi-font-size: 10.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">以及其它有关资源，该进程才真正运行。所以，进程是系统中的并发执行的单位。</span><span lang=EN-US style="mso-bidi-font-size: 10.0pt"><font face=Calibri>&nbsp;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">　在</span><span lang=EN-US><font face=Calibri>Mac</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">、</span><span lang=EN-US><font face=Calibri>Windows NT</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">等采用微内核结构的操作系统中，进程的功能发生了变化：它只是资源分配的单位，而不再是调度运行的单位。在微内核系统中，真正调度运行的基本单位是线程。因此，实现并发功能的单位是线程。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">线程概念</span></strong><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US style="FONT-SIZE: 9pt"><font face=Calibri>tread</font></span><span style="FONT-SIZE: 9pt; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）</span><strong style="mso-bidi-font-weight: normal"><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">　　<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span style="COLOR: red">线程</span></em></strong>是进程中执行运算的最小单位，亦即<strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span style="COLOR: red">执行处理机调度的基本单位</span></em></strong>。如果把进程理解为在逻辑上操作系统所完成的任务，那么线程表示完成该任务的许多可能的子任务之一。例如，假设用户启动了一个窗口中的数据库应用程序，操作系统就将对数据库的调用表示为一个进程。假设用户要从数据库中产生一份工资单报表，并传到一个文件中，这是一个子任务；在产生工资单报表的过程中，用户又可以输人数据库查询请求，这又是一个子任务。这样，操作系统则把每一个请求――工资单报表和新输人的数据查询表示为数据库进程中的独立的线程。线程可以在处理器上独立调度执行，这样，在多处理器环境下就允许几个线程各自在单独处理器上进行。<span style="COLOR: red">操作系统提供线程就是为了方便而有效地实现这种并发性</span></span><span style="COLOR: red"><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">进程和线程的关系</span><span lang=EN-US><font face=Calibri> <o:p></o:p></font></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>1</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）一个线程只能属于一个进程，而一个进程可以有多个线程，但至少有一个线程。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>2</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）资源分配给进程，同一进程的所有线程共享该进程的所有资源。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>3</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）处理机分给线程，即真正在处理机上运行的是线程。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>4</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）线程在执行过程中，需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">引入线程的好处</span><span lang=EN-US><font face=Calibri> <o:p></o:p></font></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>1</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）易于调度。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>2</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>3</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）开销少。创建线程比创建进程要快，所需开销很少。。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">（</span><span lang=EN-US><font face=Calibri>4</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）利于充分发挥多处理器的功能。通过创建多线程进程（即一个进程可具有两个或更多个线程），每个线程在一个处理器上运行，从而实现应用程序的并发性，使每个处理器都得到充分运行。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程技术</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><span style="mso-tab-count: 1"><font face=Calibri>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </font></span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程应用程序将程序划分为多个独立的任务，每个任务由一个线程处理。多线程处理可以同时运行多个线程。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程技术的优点</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(1)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程技术使程序的响应速度更快</span><span lang=EN-US><font face=Calibri> ,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">因为用户界面可以在进行其它工作的同时一直处于活动状态</span><span lang=EN-US><font face=Calibri>;</font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(2)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">当前没有进行处理的任务时可以将处理器时间让给其它任务</span><span lang=EN-US><font face=Calibri>; </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(3)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">占用大量处理时间的任务可以定期将处理器时间让给其它任务</span><span lang=EN-US><font face=Calibri>; </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(4)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">可以随时停止任务</span><span lang=EN-US><font face=Calibri>; </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(5)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">可以分别设置各个任务的优先级以优化性能。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;</font></span></span><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">是否需要创建多个线程取决于各种因素。在以下情况下</span><span lang=EN-US><font face=Calibri>,</font></span></em></strong><strong style="mso-bidi-font-weight: normal"><em style="mso-bidi-font-style: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">最适合采用多线程处理</span><span lang=EN-US><font face=Calibri>: <o:p></o:p></font></span></em></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(1)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">耗时或大量占用处理器的任务阻塞用户界面操作</span><span lang=EN-US><font face=Calibri>; </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(2)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">各个任务必须等待外部资源</span><span lang=EN-US><font face=Calibri> (</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如远程文件或</span><span lang=EN-US><font face=Calibri> Internet</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">连接</span><span lang=EN-US><font face=Calibri>)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程技术的缺点</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>1)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源</span><span lang=EN-US><font face=Calibri> ,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如打印机等。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(2)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">对线程进行管理要求额外的</span><span lang=EN-US><font face=Calibri> CPU</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">多线程的特点主要表现在其缺点上</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">比如用独立的线程来更新数组内每个元素。</span><font face=Calibri> </font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(3)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">线程的死锁。即较长时间的等待或资源竞争以及死锁等多线程症状。</span><font face=Calibri> </font></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><font face=Calibri>(4)</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">后一个线程往往会修改掉前一个线程存放的数据</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">从而使前一个线程的参数被修改</span><span lang=EN-US><font face=Calibri>;</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">另外</span><span lang=EN-US><font face=Calibri> ,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">当公用变量的读写操作是非原子性时</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">在不同的机器上</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">中断时间的不确定性</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">会导致数据在一个线程内的操作产生错误</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">从而产生莫名其妙的错误</span><span lang=EN-US><font face=Calibri>,</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">而这种错误是程序员无法预知的。</span><span lang=EN-US><font face=Calibri> </font></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><strong style="mso-bidi-font-weight: normal"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">为什么不使用多进程？</span><span lang=EN-US><o:p></o:p></span></strong></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">较之进程，线程轻便、价廉，启动速度快，退出比较快，对系统资源的冲击比较小。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如果使用多进程，最困难的问题是如何把窗口句柄交给另一个进程。在</span><span lang=EN-US><font face=Calibri>Win32</font></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">中，句柄只在其诞生地（进程中）才有意义。这是一种安全警戒，避免某个进程有意无意地危及到另一个进程的资源。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">为了分享窗口句柄，你必须明明白白地产生该句柄的一个副本，并且可以被其他进程使用。在一个多线程程序中，所有线程都可以使用这个窗口的句柄，因为句柄和线程生活在同一个进程中。</span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US><span style="mso-spacerun: yes"><font face=Calibri>&nbsp;</font></span></span><span style="FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如果两个线程分属不同的进程，那它们通常没有办法共享任何内存。<span style="COLOR: red">不同进程间如果要通讯，唯有依赖特别的设计，使之拥有共享内存（</span></span><span lang=EN-US style="COLOR: red"><font face=Calibri>shared memory</font></span><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">）。</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span style="COLOR: red; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">如果两线程属于同一进程，它们将共享所有的内存（包括全局变量、静态变量），很容易就实现了线程之间的通讯。</span><span lang=EN-US style="COLOR: red"><o:p></o:p></span></p>
<p class=MsoNormal style="MARGIN: 0cm 0cm 15.6pt; mso-para-margin-bottom: 1.0gd"><span lang=EN-US style="COLOR: black; mso-themecolor: text1"><font face=Calibri>Note</font></span><span style="COLOR: black; FONT-FAMILY: 宋体; mso-hansi-font-family: Calibri; mso-themecolor: text1; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-theme-font: minor-fareast; mso-hansi-theme-font: minor-latin">：主要是资源共享问题</span><span lang=EN-US style="COLOR: black; mso-themecolor: text1"><o:p></o:p></span></p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/115252.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-05-13 09:19 <a href="http://www.cppblog.com/changshoumeng/articles/115252.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>消息处理线程</title><link>http://www.cppblog.com/changshoumeng/articles/113827.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Wed, 28 Apr 2010 02:45:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/113827.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/113827.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/113827.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/113827.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/113827.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;1//函数名称：IOThreadProc&nbsp;&nbsp;2//函数功能：消息处理的线程&nbsp;&nbsp;3//处理对象：核心函数&nbsp;&nbsp;4//研究人员：长寿梦&nbsp;&nbsp;&nbsp;5DWORD&nbsp;WINAPI&nbsp;CP2PServer::IOThreadProc(LPVOID&nbsp;&nbsp;lpParam)&...&nbsp;&nbsp;<a href='http://www.cppblog.com/changshoumeng/articles/113827.html'>阅读全文</a><img src ="http://www.cppblog.com/changshoumeng/aggbug/113827.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-04-28 10:45 <a href="http://www.cppblog.com/changshoumeng/articles/113827.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC初学者自我检测题</title><link>http://www.cppblog.com/changshoumeng/articles/113439.html</link><dc:creator>长寿梦</dc:creator><author>长寿梦</author><pubDate>Sat, 24 Apr 2010 07:42:00 GMT</pubDate><guid>http://www.cppblog.com/changshoumeng/articles/113439.html</guid><wfw:comment>http://www.cppblog.com/changshoumeng/comments/113439.html</wfw:comment><comments>http://www.cppblog.com/changshoumeng/articles/113439.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/changshoumeng/comments/commentRss/113439.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/changshoumeng/services/trackbacks/113439.html</trackback:ping><description><![CDATA[&nbsp;
<p align=center><strong><span>VC</span></strong><strong><span>练习题（网上收集）</span></strong></p>
<p align=right><strong><span>zhangtaolmq</span></strong></p>
<p><strong><span>VC</span></strong><strong><span>习题</span><span>1</span></strong></p>
<p><span>1.2 </span><span>下列对于</span><span>WinMain</span><span>函数的描述中，错误的是（</span><span> C</span><span> </span><span>）。</span></p>
<p><span>A</span><span>）</span><span>WinMain</span><span>函数的名称是固定的</span></p>
<p><span>B</span><span>）</span><span>WinMain</span><span>函数是</span><span>Windows</span><span>程序的入口点</span></p>
<p><span>C</span><span>）</span><span>WinMain</span><span>函数不能有参数</span></p>
<p><span>D</span><span>）窗口函数与</span><span>WinMain</span><span>的关联是通过窗口类的注册实现的</span></p>
<p>&nbsp;</p>
<p><span>1.3 </span><span>以下四个特性中哪一个不属于面向对象的三大特性（</span><span>&nbsp;<span>A</span></span><span>）。</span></p>
<p><span>&nbsp;&nbsp;A</span><span>）封装性</span><span><span>&nbsp;&nbsp; </span>B</span><span>）多态性</span><span><span>&nbsp;&nbsp; </span>C</span><span>）抽象性</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）继承性</span></p>
<p>&nbsp;</p>
<p><span>1.4 </span><span>下列关键字中哪一个不是用于类的访问控制的（</span> <span>B </span><span>）。</span></p>
<p><span>A</span><span>）</span><span>public B</span><span>）</span><span>friend&nbsp;C</span><span>）</span><span>private<span>&nbsp;&nbsp; </span>D</span><span>）</span><span>protected</span></p>
<p>&nbsp;</p>
<p><span>1.5 </span><span>下面四个</span><span>MFC</span><span>类中哪一个是管理</span><span>MFC</span><span>应用程序的（</span><span>&nbsp;<span>A</span></span><span>）。</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; </span>A</span><span>）</span><span>CWinApp<span>&nbsp;&nbsp; </span>B</span><span>）</span><span>CMainFrame<span>&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>CDocument D</span><span>）</span><span>CView</span></p>
<p>&nbsp;</p>
<p><span>1.6 </span><span>下列类中不属于</span><span>MFC</span><span>框架基本类的是（</span><span>D&nbsp;</span><span>）。</span></p>
<p><span>A</span><span>）</span><span>CWinApp<span>&nbsp;&nbsp; </span>B</span><span>）</span><span>CFrameWnd<span>&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>CView<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）</span><span>CObject</span></p>
<p>&nbsp;</p>
<p><span>1.7 </span><span>传统的软件开发主要采用</span><u><span> </span></u><u><span>过程</span><span> </span></u><u><span>驱动</span></u><span>的方法，而</span><span>Windows</span><span>程序的开发使<u><span>用消息</span></u></span><u><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></u><u><span>驱动</span></u><span>模型，该模型靠<u><span>事件机制</span></u>来实现其功能。</span></p>
<p>&nbsp;</p>
<p><span>1.8<u><span> </span></u></span><u><span>主框架类</span></u><span>是应用程序中负责控制菜单、工具栏和状态栏等界面元素的最主要的类。</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span>习题</span><span>2 </span></strong></p>
<p><span>2.1 Windows </span><span>应用程序的消息来源主要包括</span><u><span> </span></u><u><span>输入消息、控制消息和系统消息、用户消息</span></u></p>
<p>&nbsp;</p>
<p><span>2.2 <u><span>SendMessage</span></u> </span><span>向</span><span>CWnd</span><span>对象发送一个消息，直到这条消息被处理之后才返回</span><span>&nbsp;</span></p>
<p><u><span>PostMessage</span></u><span> </span><span>将一条消息放入应用程序的消息队列，然后不等窗口处理这条消息直接返回</span><span>&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>2.3 CCmdUI</span><span>类的主要功能是主要用来<u><span>更新命令用户接口的状态</span></u>。如子菜单。工具栏上的按钮等</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>2.4 </span><span>代码</span><span>ON_UPDATE_COMMAND_UI</span><span>（</span><span>ID_TEST, OnUpdateTest</span><span>）的功能是：<u><span>将对</span></u></span><u><span>ID_TEST</span></u><u><span>的更新命令接口消息的处理映射到</span><span>OnUpdateTest</span></u><u><span>函数上。</span></u></p>
<p>&nbsp;</p>
<p><span>2.5 CString</span><span>类的功能是处理字符串，其</span><span>Format</span><span>函数的功能是<u><span>格式化字符串</span></u></span><span>&nbsp;</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>2.6 CTime</span><span>类的功能是</span> <span>处理日期时间，其</span><span>Format</span><span>函数的功能是<u><span>将时间对象格式化为字符串</span></u></span><u></u></p>
<p>&nbsp;</p>
<p><span>2.7 MessageBox</span><span>函数的第一个参数表示</span><u><span> </span></u><u><span>消息文字</span></u><span>，第二个参数表示</span><span>&nbsp;</span><u><span>标题文字</span></u><span>，第三个参数表示</span><u><span> </span></u><u><span>图标与按钮组合</span><span>&nbsp;</span></u><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>。</span></p>
<p><span>2.8 </span><span>在</span><span>windows</span><span>中，按下一个字符键，会依次触发</span><u><span>WM_KEYDOWN<span>&nbsp;&nbsp; </span>WM_CHAR</span></u><u><span>、和</span><span>WM_KEYUP</span></u><span>三个消息。</span></p>
<p>&nbsp;</p>
<p><span>2.9 </span><span>当</span><span>Windows</span><span>窗口内部需要重新绘制时，会得到一个</span> <span>&nbsp;WM_PAINT </span><span>&nbsp;</span><span>消息，当释放鼠标右键时，会得到一个</span> <span>WM_RBUTTONUP </span><span>&nbsp;</span><span>消息。</span></p>
<p>&nbsp;</p>
<p><strong>&nbsp;</strong></p>
<p><strong><span>习题三</span></strong></p>
<p><span>3.1 Visual C++</span><span>提供的资源编辑器不能编辑下列哪个资源（</span><span>C </span><span><span>&nbsp;&nbsp;</span></span><span>）。</span></p>
<p><span>A</span><span>）菜单</span><span>&nbsp;&nbsp;B</span><span>）工具栏</span> <span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>C</span><span>）状态栏</span> <span><span>&nbsp;&nbsp;&nbsp;</span>D</span><span>）位图</span></p>
<p>&nbsp;</p>
<p><span>3.2 MFC</span><span>应用程序框架为状态栏定义的静态数组</span><span>indicators</span><span>放在哪个文件中（</span> <span>A</span><span>&nbsp;</span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>MainFrm.cpp<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>B</span><span>）</span><span>MainFrm.h<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>stdafx.cpp<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）</span><span>stdafx.h</span></p>
<p>&nbsp;</p>
<p><span>3.3 deletemenu</span><u><span>用来删除某个菜单项，如果被删除的菜单项有相关的弹出菜单，则该弹出菜单的句柄也要被删除并释放内存。</span></u><span>appendmenu</span><u><span>用来追加某个菜单项</span></u><span>，</span><span> trackpopupmenu<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><u><span>用来在一个</span><span>POINT</span></u><u><span>结构所指定的位置显示一个上下文菜单</span></u><span>。</span></p>
<p>&nbsp;</p>
<p><span>3.4</span><span>工具栏上的按钮能触发的消息</span><u><span> command</span></u><u><span>和</span><span>&nbsp;update_command_ui</span></u><span>。</span></p>
<p>&nbsp;</p>
<p><span>3.5 </span><span>状态栏上的窗格可以分为<u><span>信息行窗格和</span></u></span><u><span> </span></u><u><span>指示器窗格</span></u><span>两类。</span></p>
<p>&nbsp;</p>
<p><span>3.6 getsubmenu </span><u><span>可以得到指向某列菜单的指针</span></u><span>。</span></p>
<p>&nbsp;</p>
<p><span>3.7 </span><span>下列函数中，可以实现画圆功能的是（</span><span>B </span><span><span>&nbsp;&nbsp;</span></span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>Rectangle<span>&nbsp;&nbsp; </span>B</span><span>）</span><span>Ellipse&nbsp;C</span><span>）</span><span>Circle<span>&nbsp;&nbsp; </span>D</span><span>）</span><span>Line</span></p>
<p>&nbsp;</p>
<p><span>3.8 CDC</span><span>类为用户提供了下列四个文本输出函数，其中，能使输出的文本呈现一个多列列表格式的是（</span><span>C </span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>TextOut&nbsp;B</span><span>）</span><span>ExtTextOut<span>&nbsp;&nbsp; </span>C</span><span>）</span><span>TabbedTextOut<span>&nbsp;&nbsp; </span>D</span><span>）</span><span>DrawText</span></p>
<p>&nbsp;</p>
<p><span>3.9</span><span>下列类中哪一个不是</span><span>GDI</span><span>对象类（</span><span>B</span><span> </span><span>）。</span></p>
<p><span>A</span><span>）</span><span>CPen<span>&nbsp;&nbsp; </span>B</span><span>）</span><span>CWnd&nbsp;C</span><span>）</span><span>Cbrush &nbsp;D</span><span>）</span><span>CRgn</span></p>
<p>&nbsp;</p>
<p><strong><span>习题四</span></strong></p>
<p><span>4.1</span><span>下面哪个不是</span><span>CDC</span><span>类的派生类（</span><span> <span>A </span></span><span>&nbsp;</span><span>）。</span></p>
<p><span>A</span><span>）</span><span>GDI</span><span>类</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>B</span><span>）</span><span>CPaintDC</span><span>类</span><span><span>&nbsp;&nbsp; </span>C</span><span>）</span><span>CClientDC</span><span>类</span><span> D</span><span>）</span><span>CWindowDC</span><span>类</span></p>
<p>&nbsp;</p>
<p><span>4.2 CDC</span><span>类中实现绘制矩形功能的函数是</span> <u><span>&nbsp;Rectangle</span></u><span>，实现绘制椭圆功能的函数是</span> <u><span>Ellipse</span></u><u><span>，</span></u><span>改变文本颜色的函数是</span> <u><span>SetTextColo</span></u><span>改变文本背景颜色的函数是</span> <u><span>SetBkcolor</span></u><span>在指定位置显示字符串的函数是</span> <u><span>&nbsp;Textout<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span></u><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>4.3 MFC</span><span>绘图要素主要分为两大类，即</span> <u><span>&nbsp;</span></u><u><span>设备场景</span><span>&nbsp;</span></u><u><span>和基本绘图工具</span><span>&nbsp;</span></u><span>。</span></p>
<p>&nbsp;</p>
<p><span>4.4 Windows</span><span>引入图形设备接口的目的是<u><span>屏蔽底层硬件的绘图细节，使编程更加容易</span></u></span><u><span> </span></u>&nbsp;<span>。</span></p>
<p>&nbsp;</p>
<p><span>4.5 Windows</span><span>用</span> <u><span><span>&nbsp;&nbsp;</span>COLORREF </span></u><span>类型的数据存放颜色，它采用</span><span>3</span><span>个参数表示红、绿、蓝三元基本色的分量值，这</span><span>3</span><span>个值的取值范围为</span><span> 0</span><span>～</span><span>255<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>4.6 </span><span>创建画笔后，必须调用</span><span>CDC</span><span>类的成员函数</span><u><span><span>&nbsp;&nbsp; </span>SelectObject</span></u><span>将新画笔选进当前的绘图环境。</span></p>
<p>&nbsp;</p>
<p><span>4.7 MFC</span><span>中的</span><span>CDialog</span><span>类封装了对话框的显示、关闭等常用功能，其中，用来显示模态对话框的是函数（</span> <span>C&nbsp;</span><span>）。</span></p>
<p><span>A</span><span>）</span><span>CreateWindow<span>&nbsp;&nbsp; </span>B</span><span>）</span><span>ShowWindow<span>&nbsp;&nbsp; </span>C</span><span>）</span><span>DoModal<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）</span><span>UpdateWindow</span></p>
<p>&nbsp;</p>
<p><span>4.8 </span><span>对话框创建后，还没显示前就会触发（</span><span> <span>B </span></span><span>&nbsp;</span><span>）消息。</span></p>
<p><span>A</span><span>）</span><span>WM_PAINT<span>&nbsp;&nbsp;&nbsp; </span>B</span><span>）</span><span>WM_INITDIALOG<span>&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>WM_CREATE&nbsp;D</span><span>）</span><span>WM_SIZE</span></p>
<p>&nbsp;</p>
<p><span>4.9 </span><span>通用对话框中，属于非模态对话框的是（</span><span>D</span><span>）。</span></p>
<p><span><span>&nbsp;&nbsp; </span>A</span><span>）文件对话框</span><span><span>&nbsp;&nbsp;&nbsp; </span>B</span><span>）颜色对话框</span><span><span>&nbsp;&nbsp;&nbsp; </span>C</span><span>）打印对话框</span><span><span>&nbsp;&nbsp;&nbsp; </span>D</span><span>）查找对话框</span></p>
<p><strong><span>习题五</span></strong></p>
<p><span>5.1 </span><span>要打开文件，应该使用哪个通用对话框（</span> <span>A</span><span> </span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>CFileDialog<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>B</span><span>）</span><span>CColorDialog<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>CPrintDialog<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）</span><span>CFontDialog</span></p>
<p>&nbsp;</p>
<p><span>5.2 </span><span>通常将对话框的初始化工作放在下列哪个函数中进行（</span><span> <span>C&nbsp;</span></span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>OnOK<span>&nbsp;&nbsp;&nbsp;&nbsp; </span>B</span><span>）</span><span>OnCancel<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>C</span><span>）</span><span>OnInitDialog<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>&nbsp;D</span><span>）</span><span>DoModal</span></p>
<p>&nbsp;</p>
<p><span>5.3</span><span>所有通用对话框都是由公共基<u><span>类</span></u></span><u><span>CCommonDialog</span></u><span>派生出来的，</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><u><span>CColorDialog</span></u></span><span>实现了标准的颜色对话框。</span></p>
<p>&nbsp;</p>
<p><span>5.4 MFC</span><span>中，与属性对话框相关的两个类是</span><u><span>&nbsp;CPropertyPage&nbsp;</span></u><u><span>和</span><span>CPropertySheet</span></u></p>
<p>&nbsp;</p>
<p><span>5.5</span><span>下列控件中不属于按钮的是<span>（</span></span><span> <span>B&nbsp;</span></span><span>）。</span></p>
<p><span><span>&nbsp;&nbsp; </span>A</span><span>）下压按钮</span><span><span>&nbsp;&nbsp;&nbsp; </span>B</span><span>）列表框</span><span><span>&nbsp;&nbsp;&nbsp; </span>C</span><span>）单选框</span><span><span>&nbsp;&nbsp;&nbsp; </span>D</span><span>）复选框</span></p>
<p>&nbsp;</p>
<p><span>5.6 </span><span>如果在输入时采用选择的方法进行，以下哪个控件不能实现（</span><span> <span>D </span></span><span>&nbsp;</span><span>）。</span></p>
<p><span><span>&nbsp;&nbsp; </span>A</span><span>）列表框控件</span><span><span>&nbsp;&nbsp;&nbsp; </span>B</span><span>）单选按钮</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>C</span><span>）复选框</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）编辑框</span></p>
<p>&nbsp;</p>
<p><span>5.7 </span><span>下面对</span><span>UpdateData</span><span>函数的描述中错误的是（</span><span> <span>D </span></span><span>&nbsp;</span><span>）。</span></p>
<p><span>&nbsp;A</span><span>）</span><span>CWnd::UpdateData</span><span>函数实现对控件中数值的输入和读取</span></p>
<p><span>&nbsp;&nbsp;B</span><span>）</span><span>UpdateData</span><span>只有一个为</span><span>TRUE</span><span>或</span><span>FALSE</span><span>的参数</span></p>
<p><span>&nbsp;C</span><span>）当调用</span><span>UpdateData</span><span>（</span><span>FALSE</span><span>）时，数据由控件关联的变量向控件传输</span></p>
<p><span>&nbsp;D</span><span>）当调用</span><span>UpdateData</span><span>（</span><span>TRUE</span><span>）时，数据由控件关联的变量向控件传输</span></p>
<p>&nbsp;</p>
<p><span>5.8 </span><span>有两种方法可以创建静态文本控件，一种是使用<u><span>资源编辑器添加</span></u>，另一种是</span> <span>使用</span><u><span>create</span></u><u><span>函数动态创建。</span></u></p>
<p>&nbsp;</p>
<p><span>5.9 </span><span>使用滚动条控件一般要用到控件所在对话框类的</span><span>W<u>M_HSCROLL</u></span><u><span>和</span><span> WM_VSCROLL<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></u><u><span>消息。</span></u></p>
<p><strong><span>习题六</span></strong></p>
<p><span>6.1 </span><span>判断一组单选按钮中哪一个被选中了，要应用</span><u><span>GetCheckedRadioButton<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></u><u><span>函数。</span></u></p>
<p><u><span>&nbsp;</span></u></p>
<p><span>6.2 <span>GetScrollpos</span></span><span>函数可以得到滚动条的滑块位置，</span><span> SetScrollpos</span><span>函数可以设置滚动条的滑块位置，</span><span> Getpos</span><span>可以得到滑动条的当前位置，</span><span>&nbsp;Setpos</span><span>&nbsp;</span><span>函数可以设置滑动条的当前位置。</span></p>
<p>&nbsp;</p>
<p><span>6.3 CListBox</span><span>类中的</span><span>&nbsp;InsertString&nbsp;</span><span>函数可以为列表框插入一个新的字符串，</span><span> ResetContent&nbsp;</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span><span>函数可以清空所有列表项内容。</span></p>
<p>&nbsp;</p>
<p><span>6.4</span><span>当程序需要与界面交换数据时，应该调用</span> <u><span>UpdataData </span></u><span>函数。</span></p>
<p>&nbsp;</p>
<p><span>6.5 &nbsp;<span>GetDocument </span></span><span>是视图类的成员函数，调用它可以得到指向与之关联的文档对象的指针，文档的串行化在</span><span>Serialize </span><span>函数中进行。</span></p>
<p>&nbsp;</p>
<p><span>6.6 </span><span>在程序的任何一个类中访问应用程序类的函数为</span><span> <span>AfxGetApp&nbsp;</span></span><span>，在程序的任何一个类中访问框架窗口类的函数为</span><span>AfxGetMainWnd()</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>。</span></p>
<p>&nbsp;</p>
<p><span>6.7</span><span>基于单文档</span><span>/</span><span>视图结构的框架程序中包含的类有</span> <u><span>CWinApp </span></u><u><span>、</span><span> CFrameWnd&nbsp;</span></u><u><span>、</span><span><span>&nbsp;&nbsp; </span>CDocument</span></u><u><span>、</span><span>CDocTemplate</span></u><u><span>和</span><span> Cview<span>&nbsp;&nbsp; </span></span></u></p>
<p>&nbsp;</p>
<p><span>6.8 ODBC</span><span>体系结构中不包括下列哪个组件（</span><span> <span>C </span></span><span>&nbsp;</span><span>）。</span></p>
<p><span><span>&nbsp;&nbsp; </span>A</span><span>）</span><span>ODBC</span><span>管理器</span><span><span>&nbsp;&nbsp;&nbsp; </span>B</span><span>）数据源</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>C</span><span>）驱动程序管理器</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp; </span>D</span><span>）数据库管理系统</span><span>DBMS</span></p>
<p>&nbsp;</p>
<p><span>6.9 </span><span>记录集可以分为</span><span> Dynaset(</span><span>动态集</span><span>)<span>&nbsp;&nbsp; </span></span><span>和</span><span>&nbsp;Snapshot</span><span>（快照）</span><span>两种。</span></p>
<p><strong><span>习题七</span></strong></p>
<p><span>7.1 MFC</span><span>的</span><span>ODBC</span><span>类主要包括</span><span>5</span><span>个类，分别是</span><span>CDatabase</span><span>、</span><span>CRecordset </span><span>、</span><span> CRecordView </span><span>、</span><span> CDBException</span><span>和</span><span> CFieldExchange&nbsp;</span><span>。</span></p>
<p>&nbsp;</p>
<p><span>7.2</span><span>可以利用</span><span>CRecordset</span><span>类的</span><span> AddNew</span><span>函数添加一条新记录，利用</span><span>CRecordset</span><span>类的</span><span>&nbsp;<span>MoveFirst</span></span><span>函数将记录指针移动到第一条记录上，利用</span><span>CRecordset</span><span>类的</span><span>Update</span><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>函数实现数据库记录的保存。</span></p>
<p>&nbsp;</p>
<p><span>7.3</span><span>下列函数中，能为状态栏第二个信息格设定文字的是（</span> <span>A </span><span>）</span></p>
<p>&nbsp;</p>
<p><span>a)SetPaneText<span>&nbsp;&nbsp;&nbsp; </span>b)SetWindowText<span>&nbsp;&nbsp; </span>c)SetPaneInfo<span>&nbsp;&nbsp;&nbsp; </span>d)SetText</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong><span>简答题：</span></strong></p>
<p>&nbsp;</p>
<p><span>1. </span><span>定义和使用消息映射表的步骤</span> <span>：</span></p>
<p><span>①</span><span> &nbsp;</span><span>在头文件的类声明中添加</span><span>DECLARE_MESSAGE_MAP</span><span>宏</span><span>声明消息映射</span><span>;</span></p>
<p><span>②</span><span> </span><span>在类的定义文件</span><span>(.cpp)</span><span>定义消息映射表，方法是在</span><span> </span><span>文件的开始处添加</span><span>BEIGN_MESSAGE_MAP</span><span>和</span><span>END_MESSAGE_MAP </span><span>这一对宏，在它们之间放置消息映射宏，</span><span>定义并初始化消息映射表</span><span>，在消息与处理消息的函数之间建立联系；</span></p>
<p><span>③</span><span> &nbsp;</span><span>在类的定义文件</span><span>(.cpp)</span><span>中添加</span><span>消息处理函数</span><span>。</span></p>
<p><span>2.</span><span>什么是消息映射？</span></p>
<p><span>所谓消息映射，简单地讲，就是让程序员指定要某个</span><span>MFC</span><span>类（有消息处理能力的类）处理某个消息。</span><span>MFC</span><span>提供了工具</span><span>ClassWizard</span><span>来帮助实现消息映射，在处理消息的类中添加一些有关<span>消息映射的内容和处理消息的成员函数</span>。程序员将完成消息处理函数，实现所希望的消息处理能力。</span></p>
<p><span>如果派生类要覆盖基类的消息处理函数，就用</span><span>ClassWizard</span><span>在派生类中添加一个消息映射条目，用同样的原型定义一个函数，然后实现该函数。这个函数覆盖派生类的任何基类的同名处理函数。</span><span> </span></p>
<p>&nbsp;</p>
<p><span>3.</span><span>创建一个窗口的步骤？</span></p>
<p><span>创建一个完整的窗口需要经过下面四个操作步骤</span></p>
<p><span>设计一个窗口类；</span></p>
<p><span>注册窗口类；</span></p>
<p><span>创建窗口；</span></p>
<p><span>显示及更新窗口。</span><span> </span></p>
<p>&nbsp;</p>
<p><span>4.</span><span>什么是模态对话框？什么是非模态对话框？</span></p>
<p><span>所谓&#8220;模态对话框&#8221;是指对话框被弹出后用户必须在对话框中作出相应的操作；在退出对话框之前，会阻止其他应用程序的运行（包括它所在的应用程序）</span></p>
<p><span>所谓&#8220;非模态对话框&#8221;是指当对话框被弹出后，将一直保留在屏幕上，但不影响其他应用程序的运行，用户可以继续在对话框所在的应用程序中进行其他操作；当需要使用对话框时，只需像激活一般窗口一样单击对话框所在的区域即可。例如在</span><span>Microsoft Word</span><span>中的&#8220;查找&#8221;和&#8220;替换&#8221;对话框。</span><span> </span></p>
<p>&nbsp;</p>
<p><span>5.</span><span>文档</span><span>/</span><span>视图结构的工作机制</span></p>
<p><span><span>l&nbsp;</span></span><span>视图通过</span><span>GetDocument</span><span>成员函数获得指向相关联的文档对象的指针</span></p>
<p><span><span>l&nbsp;</span></span><span>通过该指针调用文档类的成员函数来从文档中读取数据</span></p>
<p><span><span>l&nbsp;</span></span><span>视图把数据显示于计算机屏幕上</span></p>
<p><span><span>l&nbsp;</span></span><span>用户通过与视图的交互来查看数据并对数据进行修改</span></p>
<p><span><span>l&nbsp;</span></span><span>视图通过相关联的文档类的成员函数将经过修改的数据传递给文档对象</span></p>
<p><span><span>l&nbsp;</span></span><span>文档对象获得修改过的数据之后，对其进行必要的修改，最后保存到永久介质</span><span>(</span><span>如磁盘文件</span><span>)</span><span>中</span></p>
<p>&nbsp;</p>
<p><span>&nbsp;</span></p>
<p>&nbsp;</p>
<p><span>6.</span><span>从</span><span>CDocument</span><span>类派生新的文档类的一般过程如下：</span></p>
<p><span>为每一个文档类型从</span><span>CDocument</span><span>类派生一个相应的文档类。为文档类添加成员变量，这些变量主要用来保存文档的数据，并使其它的对象</span><span>(</span><span>如视图对象</span><span>)</span><span>可以访问这些成员变量，从而实现文档和视图的相互搭配使用。重载</span><span>Serialize</span><span>成员函数，实现文档数据的串行化。</span> </p>
<p>&nbsp;</p>
<p><span>7. </span><span>串行化的好处</span></p>
<p><span>使用串行化的好处：是不需要重载文件打开、文件保存之类的方法，</span><span>MFC</span><span>框架会自动完成这些任务，并自动调用文档类的</span><span>Serialize</span><span>方法来完成串行化过程。</span></p>
<p><span>如果文档的抽象数据只有一个字符串，那么你只需要在</span><span>Serialize</span><span>中添加相映语句就可以完成串行化过程。</span></p>
<p>&nbsp;</p>
<p><span>8</span><span>、简述在</span><span>MFC Windows</span><span>应用程序中使用</span><span>CBrush</span><span>对象的基本步骤。</span></p>
<p>&nbsp;</p>
<p><span><span>l&nbsp;</span></span><span>创建画刷（可调用画刷创建函数</span><span>CreateSolidBrush</span><span>、</span><span>CreateHatchBrush</span><span>）</span></p>
<p><span><span>l&nbsp;</span></span><span>将画刷选入设备环境（调用</span><span>SelectObject</span><span>）</span></p>
<p><span><span>l&nbsp;</span></span><span>使用该刷子进行绘画</span></p>
<p><span><span>l&nbsp;</span></span><span>删除画刷</span></p>
<p>&nbsp;</p>
<p><span>9</span><span>、简述文档</span><span>/</span><span>视图结构中包含的主要的类及各个类之间的相互关系。</span></p>
<p><span>包括</span><span> CWinApp</span><span>、</span><span> CDocument </span><span>、</span><span>CView</span><span>、</span><span> CDocTemplate </span><span>、</span><span> CFrameWnd </span><span>类</span></p>
<p><span>一个</span><span> App</span><span>可以包含多个文档模版（</span><span> CDocTemplate </span><span>），但是</span><span> MFC AppWizard </span><span>（无论是</span><span> SDI </span><span>还是</span><span> MDI </span><span>）都只是默认生成一个。但是在实际开发中一个文档模版不够，需要自己手工添加。这个结构是通过</span><span> MFC </span><span>中</span><span> CWinApp </span><span>的成员变量</span><span> CDocManager * m_pDocManager </span><span>实现的。</span></p>
<p><span>CDocTemplate </span><span>拥有</span><span> 3 </span><span>个成员变量，分别保存着</span><span> Document </span><span>、</span><span> View </span><span>、</span><span> Frame </span><span>的</span><span> CRuntimeClass </span><span>指针，另外持有成员变量</span><span> m_nIDResource </span><span>，用来指定这个</span><span> Document </span><span>显示时候采用的菜单资源。</span></p>
<p><span>一个文档可以有多个视图，由</span><span> Document </span><span>中成员变量</span><span> CPtrList m_ViewList </span><span>维护。</span></p>
<p><span>CFrameWnd </span><span>拥有一个成员变量</span><span> CView* m_pActiveView </span><span>指向当前活动的</span><span> View</span><span>。</span></p>
<p><span>CView </span><span>中拥有一个成员变量</span><span> CDocument* m_pDocument </span><span>指向该视图相关的</span><span> Document</span><span>。</span> </p>
<p>&nbsp;</p>
<p><span>10</span><span>、写出按钮</span><span>Show</span><span>和</span><span>Show the Age</span><span>响应单击消息的函数</span><span>OnEnable</span><span>（）、</span><span>OnShow</span><span>（）和</span><span>OnShowage</span><span>（）。函数</span><span>OnShow</span><span>（）使编辑框</span><span>IDC_EDIT1</span><span>和</span><span>IDC_EDIT2</span><span>处于显示状态，函数</span><span>OnShowage</span><span>（）要能够判断出单选按钮</span><span>IDC_RADIO1</span><span>、</span><span>IDC_RADIO2</span><span>和</span><span>IDC_RADIO3</span><span>哪个被选中，并将被选中单选按钮的标题添加到组合框</span><span>IDC_COMBO1</span><span>中，设为组合框的默认选项。</span></p>
<p><span>CMyDialog::OnEnable</span><span>（）</span></p>
<p><span>{</span></p>
<p><span>&nbsp;GetDlgItem(IDC_EDIT1)-&gt;ShowWindow(SW_HIDE);</span></p>
<p><span>&nbsp;GetDlgItem(IDC_EDIT2)-&gt;ShowWindow(SW_HIDE);</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p><span>CMyDialog::OnShow</span><span>（）</span></p>
<p><span>{</span></p>
<p><span>&nbsp;GetDlgItem(IDC_EDIT1)-&gt;ShowWindow(SW_SHOW);</span></p>
<p><span>&nbsp;GetDlgItem(IDC_EDIT2)-&gt;ShowWindow(SW_SHOW);</span></p>
<p><span>} </span></p>
<p><span>CMyDialog::Onshowage() </span></p>
<p><span>{</span></p>
<p><span>&nbsp;CString strText;</span></p>
<p><span>&nbsp;int i=-1;</span></p>
<p><span>&nbsp;i=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO3);</span></p>
<p><span>&nbsp;if(i==IDC_RADIO1)</span></p>
<p><span>&nbsp;strText="&gt;20";</span></p>
<p><span>&nbsp;else if(i==IDC_RADIO2)</span></p>
<p><span>&nbsp;strText="15-20";</span></p>
<p><span>&nbsp;else if(i==IDC_RADIO3)</span></p>
<p><span>&nbsp;strText="&lt;15";</span></p>
<p><span>&nbsp;GetDlgItem(IDC_COMBO1)-&gt;SetWindowText(strText);</span></p>
<p><span>&nbsp;</span></p>
<p><span>}</span></p>
<p><span>2</span><span>、下面左图为菜单结构，右图为运行结果，写出弹出菜单的代码。</span></p>
<p><span>void CPopupmenuView::OnContextMenu(CWnd* pWnd, CPoint point)</span></p>
<p><span>{</span></p>
<p><span>CMenu menuPopup ;</span></p>
<p><span>if(menuPopup.LoadMenu(IDR_MAINFRAME))</span></p>
<p><span>menuPopup.GetSubMenu (4)-&gt;TrackPopupMenu (TPM_LEFTALIGN | TPM_RIGHTBUTTON , point.x&nbsp;, point.y&nbsp;, this);</span></p>
<p><span>}</span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<img src ="http://www.cppblog.com/changshoumeng/aggbug/113439.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/changshoumeng/" target="_blank">长寿梦</a> 2010-04-24 15:42 <a href="http://www.cppblog.com/changshoumeng/articles/113439.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>