100165449.htm
来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 86 行
HTM
86 行
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>
15.1 线程
</title></head>
<body>
<div class="area">
<div class="col1">
<div class="lineBlue">
</div>
<!-- title -->
<div class="arcTitle">
<h1>
<a href="../16">
C#高级编程(第3版)【全文连载】
</a>
</h1>
<div style="text-align: center; font-size: 15px">
<a href="100165449.htm">
15.1 线程
</a>
</div>
<div style="text-align: center; font-size: 15px">
<a class="url" href="../../default.htm">http://book.csdn.net/</a>
2006-10-13 14:41:00
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165449.htm'><font color='red'>15.1 线程</font></a></h1>
<div id="divRelateNode" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165446.htm'>14.4.10 使用证书发布代码</a></div><div style='float:right;width:49%'>·<a href='100165447.htm'>14.4.11 区域的管理</a></div><div style='float:left;width:49%'>·<a href='100165448.htm'>14.5 小结</a></div><div style='float:right;width:49%'>·<a href='100165450.htm'>15.2 多线程应用程序</a></div><div style='float:left;width:49%'>·<a href='100165451.htm'>15.3 线程的处理</a></div><div style='float:right;width:49%'>·<a href='100165452.htm'>15.4 ThreadPlayaround示例</a></div></div>
</div>
</div>
</div>
<!-- main -->
<div id="main">
<div id="text"> <link href="css.css" rel="stylesheet" type="text/css" /><p class="MsoNormal"><a ftel="baseclasses"></a><a ftel="threads"><span style="FONT-FAMILY: 宋体">本章介绍</span><span lang="EN-US">C#</span></a><span style="FONT-FAMILY: 宋体">和</span><span lang="EN-US">.NET</span><span style="FONT-FAMILY: 宋体">基类为开发多线程应用程序所提供的支持。我们将简要介绍</span><span lang="EN-US">Thread</span><span style="FONT-FAMILY: 宋体">类以及各种线程支持,再用两个示例来说明线程的规则。然后论述线程同步时会出现的问题。由于这个主题非常复杂,所以本节的重点是理解一些基本规则,而不是开发真实的应用程序。本章的主要内容如下:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">如何开始一个线程</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">提供线程的优先级</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">通过同步控制对对象的访问</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">学习完本章,就可以在自己的代码中处理线程了。下面首先了解线程的基础知识。</span></p>
<h3 style="MARGIN-TOP: 11.4pt; MARGIN-LEFT: 0cm; MARGIN-RIGHT: 0cm; FTEL: 11.4pt"><span lang="EN-US">15.1 </span><span style="FONT-FAMILY: 楷体_GB2312">线程</span></h3>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">线程是程序中的执行序列。使用</span><span lang="EN-US">C#</span><span style="FONT-FAMILY: 宋体">编写任何程序时,都有一个入口:</span><span lang="EN-US">Main()</span><span style="FONT-FAMILY: 宋体">方法。程序从</span><span lang="EN-US">Main()</span><span style="FONT-FAMILY: 宋体">方法的第一条语句开始执行,直到这个方法返回为止。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个程序结构非常适合于有一个可识别的任务序列的程序,但程序常常需要同时完成多个任务。例如启动</span><span lang="EN-US">Internet Explorer</span><span style="FONT-FAMILY: 宋体">,并为某些页面需要越来越多的时间加载而烦恼。最终</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">可能就在</span><span lang="EN-US">2</span><span style="FONT-FAMILY: 宋体">秒钟后</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,用户会单击</span><span lang="EN-US">Back</span><span style="FONT-FAMILY: 宋体">按钮,或者键入其他的</span><span lang="EN-US">URL</span><span style="FONT-FAMILY: 宋体">查看其他的页面。为此,</span><span lang="EN-US">Internet Explorer</span><span style="FONT-FAMILY: 宋体">必须至少做</span><span lang="EN-US">3</span><span style="FONT-FAMILY: 宋体">件事:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">从</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">返回时,把页面的数据和附带的文件收集到垃圾箱中</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">显示页面</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">查看用户希望</span><span lang="EN-US">IE</span><span style="FONT-FAMILY: 宋体">执行其他任务的输入内容</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">例如查看按钮的单击</span><span lang="EN-US">)</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这种情况也会发生在下述场合下:程序在执行某个任务,同时显示一个对话框,用户可以在这个对话框中随时取消这个任务。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">下面更详细地讨论</span><span lang="EN-US">Internet Explorer</span><span style="FONT-FAMILY: 宋体">示例。为了简化问题,我们忽略存储来自</span><span lang="EN-US">Internet</span><span style="FONT-FAMILY: 宋体">的数据的任务,并假定</span><span lang="EN-US">Internet Explorer</span><span style="FONT-FAMILY: 宋体">只有两个任务:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">显示页面</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">查看用户的输入</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">假定这个</span><span lang="EN-US">Web</span><span style="FONT-FAMILY: 宋体">页面需要较长的时间才能显示,其中有一些处理器密集型的</span><span lang="EN-US">JavaScript</span><span style="FONT-FAMILY: 宋体">,或者包含需要持续更新的选取框元素。处理这种情况的一个方式是编写一个方法,它在显示页面的过程中,还执行其他工作。过一会儿,假定是</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体">分之一秒,该方法将检查是否有用户输入。如果有,就处理该用户的输入</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">这会取消显示任务</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">。否则,该方法就在下一个</span><span lang="EN-US">20</span><span style="FONT-FAMILY: 宋体">分之一秒内显示页面。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这个方法是有效的,但要执行一个非常复杂的方法。更糟糕的是,它将完全忽略</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">基于事件的结构。本书前面提到,如果在系统中有任何用户输入,就会通知应用程序产生了一个事件。下面修改这个方法,让</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">使用事件:</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">编写一个响应用户输入的事件处理程序。该响应应包括设置一些标志,表示显示页面的过程停止。</span></p>
<p class="1" style="MARGIN-LEFT: 37.55pt; FTEL: -16.1pt"><span lang="EN-US">●<span style="FONT: 7pt "Times New Roman""> </span></span><span style="FONT-FAMILY: 宋体">编写一个方法处理显示任务,这个方法用于系统在没有做其他事情时显示页面。</span></p>
<p class="MsoNormal"><span style="FONT-FAMILY: 宋体">这种解决方案比较好,因为它利用了</span><span lang="EN-US">Windows</span><span style="FONT-FAMILY: 宋体">事件结构。下面看看这个方法要完成的工作:从一开始就必须仔细考虑时间。在这个方法运行时,计算机不能响应任何用户输入。即这个方法必须知道自己被调用的时间,在工作过程中一直监视着时间,一旦过去指定的时间</span><span lang="EN-US">(</span><span style="FONT-FAMILY: 宋体">留给用户响应的时间略小于</span><span lang="EN-US">10</span><span style="FONT-FAMILY: 宋体">分之一秒</span><span lang="EN-US">)</span><span style="FONT-FAMILY: 宋体">,就必须返回。而且,在这个方法返回前,还需要存储当前的状态,这样,在下一次调用时,才知道应从哪里开始。这样的方法是肯定可以编写出来的,过去使用</span><span lang="EN-US">Windows 3.1</span><span style="FONT-FAMILY: 宋体">时,就必须这样处理。</span><span lang="EN-US">NT 3.1</span><span style="FONT-FAMILY: 宋体">和后来的</span><span lang="EN-US">Windows 95</span><span style="FONT-FAMILY: 宋体">引入了多线程处理,以更方便的方式解决该问题。</span></p></div>
<!-- page -->
<div class="page" style="text-align: center">
<a href="100165448.htm">上一页</a> <a href="index.html">首页</a> <a href="100165450.htm">下一页</a>
</div>
<div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
<div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
图书导读
</div>
<div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
<!--导读-->
<h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165449.htm'><font color='red'>15.1 线程</font></a></h1>
<div id="divRealteNod2" style="padding-left: 2px">
<div style='float:left;width:49%'>·<a href='100165446.htm'>14.4.10 使用证书发布代码</a></div><div style='float:right;width:49%'>·<a href='100165447.htm'>14.4.11 区域的管理</a></div><div style='float:left;width:49%'>·<a href='100165448.htm'>14.5 小结</a></div><div style='float:right;width:49%'>·<a href='100165450.htm'>15.2 多线程应用程序</a></div><div style='float:left;width:49%'>·<a href='100165451.htm'>15.3 线程的处理</a></div><div style='float:right;width:49%'>·<a href='100165452.htm'>15.4 ThreadPlayaround示例</a></div></div>
</div>
</div>
</div>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?