Windows程序设计教程 第2版 教学课件 作者 王秀梅 第14章多线程.ppt

Windows程序设计教程 第2版 教学课件 作者 王秀梅 第14章多线程.ppt

  1. 1、本文档共132页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实现这种通信方式的关键步骤是: (1)确定谁是消息发送者,谁是接收者,以确定采用工作者线程还是用户界面线程。 (2)在发送和接收消息线程的头文件中定义消息,在接收消息的类中添加消息映射、定义消息响应函数。 (3)发送消息时一定要正确设定消息发送函数入口参数中的接收消息窗口的句柄。 如果句柄设置错误,消息处理函数是不会响应的。 本实验在【例14-4】的基础上,为自定义消息和消息函数增加了消息处理参数,具体实现参考【例14-4】的实现过程。下面给出主要代码: 带有消息参数的消息发送函数: ::SendMessage(hwnd,WM_USERMSG, wParam, lParam); //向主窗口发送自定义消息 Hwnd是接收消息窗口的句柄 在接收消息的类中声明消息处理函数和添加自定义消息映射宏: afx_msg void OnButton1(); afx_msg void OnMsg(WPARAM wParam, LPARAM lParam); //声明消息处理函数 //}}AFX_MSG … ON_BN_CLICKED(IDC_BUTTON1, OnButton1) //}}AFX_MSG_MAP //添加自定义消息映射宏 ON_MESSAGE(WM_USERMSG,OnMsg, WPARAM wParam, LPARAM lParam) END_MESSAGE_MAP() 对于添加位置,请注意这段代码中的一些语句的位置就可以确定添加在何处。 图14.21 使用互斥同步对象实例设计阶段界面 图14.22 未使用互斥同步运行效果 图14.23 使用互斥同步运行效果 14.6.4 使用临界区对象 操作系统将一次仅能让一个线程使用的资源称为临界资源,如一些输入输出的硬件设备和共享的数据资源等都属于临界资源。 也就是说,临界资源不允许两个或两个以上的线程同时访问。 MFC的临界区同步对象和互斥同步对象很类似,也就是说使用临界区对象时一个线程只能拥有一个临界区对象,而另一个线程使用临界区对象只有等这个线程释放了临界区对象才可以使用。 14.6.5 使用信号量对象 临界区同步对象和互斥同步对象,对共享资源的访问在任一时刻只允许一个线程进行,而信号量同步对象是限制同一资源在这一刻访问线程的数量。 也就是说,某一资源可以允许同时有N个线程访问,而第N+1以后的线程只能挂起处于等待状态,当N个线程的某一个线程访问结束后,第N+1个线程立即投入运行,这就是信号量同步对象的工作原理。 【例14-7】 使用信号量同步对象控制线程对资源的访问数量。 图14.24 使用信号量同步对象实例外观 图14.25 信号量同步对象运行界面图 图14.26 设定信号量同步和启动线程数量 小  结 本章在阐述进程和线程的基础上,以具体的应用实例,主要讨论了MFC类库对多线程程序设计的支持。 概括起来有以下几个方面: (1)线程由创建到消失有一个生存周期,分为创建、挂起、运行、终止,并且有相应的函数支持这些操作。 由MFC创建的线程可以使用Win32 API函数终止、挂起或恢复运行。 (2)MFC线程分为工作者线程和用户界面线程。 工作者线程用于处理费时或不需用户干预的数据处理工作,而用户界面线程主要是为了响应用户输入,处理系统发送的消息和事件,后者具有消息队列和消息循环。 (3)线程间的通信可采用全局变量和自定义消息方式。 工作者线程和用户界面线程都可以采用全局变量和自定义消息方式进行通信。 工作者线程和用户界面线程可以发送消息到主线程,但工作者线程不能接收消息,因为工作者线程没有消息循环。 (4)线程的优先级是由线程所在进程的优先级和线程本身的优先级确定的。 进程优先级分为4个等级,线程的优先级分为7个等级,二者的组合构成线程的基本优先级,分为0~31共32个等级,这个优先级就是线程运行时所具有的优先级。 线程的优先级可以通过Windows API或CWinThread提供的函数进行访问。 (5)?MFC提供了4种同步对象,即事件对象CEvent、互斥对象CMutex、临界区对象CCriticalsection和信号量对象CSemaphore,实现线程对象对访问资源的控制。

文档评论(0)

开心农场 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档