mt04线程间通信.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文档。上传文档
查看更多
mt04线程间通信

线程间通信 第四章 线程间通信 4.1 进程/线程通信的方式 4.2 使用事件进行通信 4.3 Windows 消息 4.4 Shared Memory 4.1 进程/线程通信的方式 某些应用程序中,进程/进程和线程/线程之间不可避免地进行通信,进行消息传递,数据共享等 同一进程的线程之间通信方式包括Windows中常用Event, Message等。 不同进程之间的通信可以利用Event, FileMapping(内存共享), WM_COPYDATA消息以及ClipBoard(剪贴板),DDE(动态数据交换), MessagePipe, MailSlot(邮件槽)等 4.2 使用事件进行通信 事件除了用来保证两个线程之间同步之外,借由通知功能,也可以作为线程之间的简单通信的手段 线程使用WaitForSingleObject等待一件事情的发生,该事件可以由另外一个线程通过SetEvent进行触发。 使用WaitForMultipleObjects等待多个由其他线程触发的事件(某些情况下,在线程的函数中也给自己发送消息) 事件只能通知一件事情的发生,不能传递其他附属数据。 通知事件 调用SetEvent, 可以将事件的内核对象的状态变成已通知 调用ResetEvent, 可以将事件的内核对象的状态变成未通知 调用PulseEvent, 将事件对象置为有信号状态,然后立即置为无信号状态,在实际开发中这个函数很少使用 不同进程之间也可以通过Event通知事件,这可以通过命名对象来实现 CreateEvent时指定了名称,不同进程之间通过创建同名的Event就可以获得指向同一个内核对象的句柄,这样不同进程间就可以互相通知和等待Event 使用事件通知并传送数据 Event可以通知一件事情, 但是不能同时传送数据, 可以采用几种方式异步地获得数据. 先设置给接收方数据, 后通知Event. 由接收Event方提供设置(保存)数据的函数, 在接收方接受到通知后, 从自己保存的数据中取得数据. 先通知Event后从发送方取得数据 使用Event做成消息队列 在接收方做成一个存储消息和数据的队列, 每次登录一个消息(数据)后,通知接收方, 接受方从该队列中顺序取得数据. 4.3 Windows消息 Windows是一个消息(Message)驱动系统 Windows的消息提供了应用程序之间、应用程序与Windows系统之间进行通信的手段。 应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。 Windows系统中有两种消息队列:系统消息队列和应用程序消息队列。 计算机的所有输入设备由Windows监控。当一个事件发生时,Windows先将输入的消息放入系统消息队列中,再将消息拷贝到相应的应用程序消息队列中。应用程序的消息处理程序将反复检测消息队列,并把检测到的每个消息发送到相应的窗口函数中。这便是一个事件从发生至到达窗口函数必须经历的过程。 注意: 消息并非是抢占性的,无论事件的缓急,总是按照到达的先后派对,依次处理(一些系统消息除外),这样可能使一些实时外部事件得不到及时处理 用户界面线程和工作线程 Windows中存在两种线程:用户界面线程、工作线程。 工作线程 用来执行某些辅助处理的线程,它不需要进行任何系统事件或者窗口事件的处理。 用户界面线程 指拥有自己的消息循环并能对用户界面对象进行创建、交互和撤销的线程 Windows的消息机制与用户界面线程息息相关。 用户界面线程一般是继承CWinThread类实现。 一个线程被创建后,系统假定线程不会被用于任何与用户相关的操作 一旦一个线程调用一个与图形用户界面有关的函数 (如创建窗口或者检查消息队列的函数),Windows会分配给这个线程一个THREADINFO结构。 线程的消息队列 每个线程利用THREADINFO来认为自己是在一个独占的环境中运行。在这个结构里保存了一系列的消息队列(登记消息队列、发送消息队列、应答消息队列)、唤醒标志、以及用来描述线程局部输入状态的若干变量。 THREADINFO结构是窗口消息系统的基础 当线程有了与之相联系的THREADINFO的结构时,线程就有了自己的消息队列集合 Windows消息结构介绍 MSG The MSG structure contains message information from a threads message queue. typedef struct tagMSG { HWND hwnd; //接收消息的窗口句柄 UINT message; WPARAM wParam; //一个32位的参数,其含义和数值根据消息的不同而不同。 LPARAM lParam; //一个32位的消息参数,其值与消

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档