Visual C++实用教程第9章多线程.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文档。上传文档
查看更多
9.3.4 线程间的通信 线程间的通信通常采用共享全局变量,共享存储区来实现。 因为所有的线程都可以访问这些资源。 主线程不能通过发送消息给辅助线程实现通信,但辅助线程可以通过发送自定义消息达到和主线程通信的目的。 本节将通过一个简单的实例,介绍使用共享存储区和自定义消息实现线程间通信的功能。 【例9-1】 线程之间通信实例。 (a) (b) 图9-1 程序运行界面 9.3.5 线程的同步 在多线程程序设计中,经常会出现两个或多个线程使用一个公共变量,或者多个线程共享一些公共存储区的情况。 凡是涉及共享资源的情况都有可能会引起程序的错误。 为了解决这些问题,Windows提供了大量线程的同步方法,例如,变量锁、临界区、信号量、事件对象、互斥对象等。 1.互锁操作 一个或两个变量的互锁操作是最简单的同步原语。 Win32提供了7个具有线程安全性的原子操作,具体介绍如下。 (1)InterlockedIncrement (2)InterlockedDecrement (3)InterlockedExchange (4)InterlockedExchangeAdd (5)InterlockedExchangePointer (6)InterlockedCompareExchange (7)InterlockedCompareExchange Pointer 2.临界区 临界区(Critical Section)是一段程序代码,在任何时候都只能被一个线程使用。 如果有多个线程同时访问临界区,这时只能有一个线程进入,其他线程则等待,直到临界区被释放。 与其他同步方法不同的是,临界区只能在单个进程内使用。 使用临界区的时候要避免长时间锁住一份资源。 进入临界区后必须尽快地离开,释放资源。 如果是主线程(GUI线程)要进入一个没有被释放的临界区,将会出现错误。 (1)InitializeCriticalSection (2)DeleteCriticalSection (3)EnterCriticalSection (4)LeaveCriticalSection (5)CcriticalSection 函 数 名 称 作 用 CCriticalSection 构造函数,构造CCriticalSection对象 Lock 进入临界区 UnLock 离开临界区 表9-4 CEvent类的成员函数 3.事件 事件(Event)是由Windows操作系统管理的同步对象,可以用于进程或线程的同步。 一个事件被创建后,只有激发状态和未激发状态两种状态,也称为发信号状态和未发信号状态。 事件包括手动重置事件和自动重置事件两种类型。 手动重置事件被设置为激发状态后,会唤醒所有等待的线程,而且一直保持激发状态,直到程序重新把它设置为未激发状态。 自动重置事件被设置为激发状态后,会唤醒一个等待中的线程,然后自动恢复为未激发状态。 所以用自动重置事件来同步两个线程比较理想。 第9章 多 线 程 本章主要介绍Windows操作系统下多线程的基本概念、创建管理线程的方法,以及线程的同步问题。 Windows提供了大量的线程同步技术,这些技术可以应用于不同的实际情况。 同时,MFC对线程操作进行了封装,提供了支持线程操作的类库。 本章主要讨论这些技术,并且给出相应的实例。 本章主要内容如下: ● Windows下多线程的基本概念; ● 用户界面线程和工作者线程; ● 线程的管理操作; ● 线程的同步; ● 多线程编程实例。 多线程的基本概念 9.1 两种重要的线程 9.2 线程的操作 9.3 小 结 9.4 9.1 多线程的基本概

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档