清华大学原版c#学习资料线程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第十一章 线程 目标 ? 线程的概念 ? 多线程应用程序 ? 线程的处理 ? 线程的优先级 ? 同步的含义 ? 同步的问题 体验 ? 程序定义两个类,这两个类 中都包含一个每隔 0 . 5 秒输 出 5 个数字并换行的程序。 创建这两个类的对象,并使 它们交叉显示数字。 线程简介 3-1 同时执行所有任务, 时间更少,效率更高 一览无遗 操作系统允许计算机 同时执行多项操作 在同一时间点执行各项进程 人 体 血液循环 程序 (进程) 读 ,写 ? 编译程序 ? 发送 / 接收邮件 ? 打印文件 ? 其他 线程简介 3-2 线程 2 线程 3 线程 1 程序 1 单独的执行路径 线程 1 线程 2 线程 3 程序 2 线程简介 3-3 在以下情况中可能要使用到多线程: ? ? 程序需要同时执行两个或多个任务 程序要等待某事件的发生,例如用户输入、文件操作、 网络操作、搜索等 后台程序 ? 线程及多线程工作原理 ? 线程表示计算机执行的指令序列。 ? 一个处理器在某一刻只能处理一个任务。 如果有一个多处理器系统,理论上它可以 同时执行多个指令 —— 一个处理器执行一 个指令,但大多数人使用的是单处理器计 算机,这种情况是不可能同时发生的。而 实际上, Windows 操作系统表面上可以同 时处理多个任务,这个过程称为抢先式多 任务处理( pre-emptive multitasking )。 抢先式多任务处理 ? 所谓抢先式多任务处理,是指 Windows 在某个进 程中选择一个线程,该线程运行一小段时间。 Microsoft 没有说明这段时间有多长,因为为了获 得最好的性能, Windows 有一个内部操作系统参 数来控制这个时间值。但在运行 Windows 应用程 序时,用户不需要知道它。从我们的角度来看, 这个时间非常短,肯定不会超过几毫秒。这段很 短的时间称为线程的时间片( time slice )。过了 这个时间片后, Windows 就收回控制权,选择下 一个被分配了时间片的线程。这些时间片非常短, 我们可以认为许多事件是同时发生的。 创建及启动线程 2-1 引用 System.Threading 命名空间 Thread 线程实例名 = new Thread(new ThreadStart( 方法名 )); 只创建但不启动线程 线程实例名 .Start(); 启动线程 … void ChangeColorDepth() { // processing to change color depth of image } … Thread depthChangeThread = new Thread(); depthChangeThread . Name = Depth Change Thread; ThreadStart entryPoint = new ThreadStart(ChangeColorDepth); depthChangeThread . Start(); 创建及启动线程 2-2 ? 两个线程就会同时运行 主线程 Thread.Start() DepthChange 线程 上例程序内线程图 线程挂起及恢复 ? 临时挂起会话进程(用户通常不会这么做,但这 仅是一个示例,在更真实的示例中,用户可能是 暂停声音文件或视频文件的播放) 。 ? 在主线程中编写如下代码,挂起该线程: depthChangeThread . Suspend(); ? 如果需要恢复该线程,可以使用下面的方法: depthChangeThread . Resume(); 中止线程 ? 如需要退出该线程 depthChangeThread . Abort(); ? 如果后续的处理依赖于另一个已经中止的线 程,可以调用 Join() 方法,等待线程中止: depthChangeThread . Abort(); depthChangeThread . Join(); 线程的优先级 2-1 ? 如果在应用程序中有多个线程在运行,但 一些线程比另一些线程重要,该怎么办? ? 可以在一个进程中为不同的线程指定不同 的优先级 线程的优先级 2-2 ? 高优先级的线程可以完全阻止低优先级的 线程执行,因此在改变线程的优先级时要 特别小心

文档评论(0)

sandajie + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档