- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
、实验目的
在掌握基于消息的windows程序结构和多线程程序设汁方法的基础上,设计 一个多线程同步的程序。使学生能够从程序设计的角度了解多线程程序设计的方法 和在windows系统下多线程同步互斥的机制。
二、实验内容
理解Windows程序设计的基本思想,理解基于消息的程序设计方法,能够 设计出简单的基于事件的windows程序,完成基本控件的使用
结合操作系统中信号量与互斥体的概念,在MFC中找到对应的相关类
设计一个多线程同步的程序,
多线程概述
进程和线程都是操作系统的概念。进程是应用程序的执行实例,每个进程是 山私有的虚拟地址空间、代码、数据和其它各种系统资源组成,进程在运行过程中 创建的资源随着进程的终止而被销毁,所使用的系统资源在进程终止时被释放或关 闭。
线程是进程内部的一个执行单元。系统创建好进程后,实际上就启动执行了 该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函 数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终 止。
每一个进程至少有一个主执行线程,它无需由用户去主动创建,是山系统自 动创建的。用户根据需要在应用程序中创建其它线程,多个线程并发地运行于同一 个进程中。一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚
拟地址空间、全局变量和系统资源,所以线程间的通讯非常方便,多线程技术的应 用也较为广泛。
多线程可以实现并行处理,避免了某项任务长时间占用CPU时间。要说明的 一点是,目前大多数的计算机都是单处理器(CPU)的,为了运行所有这些线程, 操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间 片,这就给人一种假象,好象这些线程都在同时运行。由此可见,如果两个非常活 跃的线程为了抢夺对CPU的控制权,在线程切换时会消耗很多的CPU资源,反而会 降低系统的性能。这一点在多线程编程时应该注意。
Win32 SDK函数支持进行多线程的程序设计,并提供了操作系统原理中的各 种同步、互斥和临界区等操作。Visual C++ 6.0中,使用MFC类库也实现了多线 程的程序设讣,使得多线程编程更加方便。
VC中提供线程同步的方法:
临界区(CCriticalSection)
事件(CEvent)
互斥量(CMutex)
信号量(CSemaphore)
A、使用 CCriticalSection 类
当多个线程访问一个独占性共享资源时,可以使用“临界区”对象。任一时刻 只有一个线程可以拥有临界区对象,拥有临界区的线程可以访问被保护起来的资源 或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃 临界区时为止,这样就保证了不会在同一时刻出现多个线程访问共享资源。
CCriticalSection类的用法非常简单,步骤如下:
定义CCriticalSection类的一个全局对象(以使各个线程均能访问),如 CCriticalSection critical_section:
在访问需要保护的资源或代码之前,调用CCriticalSection类的成员Lock
()获得临界区对象:critical_section. Lock();
在线程中调用该函数来使线程获得它所请求的临界区。如果此时没有其它线 程占有临界区对象,则调用Lock()的线程获得临界区;否则,线程将被挂起,并 放入到一个系统队列中等待,直到当前拥有临界区的线程释放了临界区时为止。
访问临界区完毕后,使用CCriticalSection的成员函数Unlock()来释放临 界区:critical_section. Unlock():
再通俗一点讲,就是线程A执行到critical_section. Lock();语句时,如果 其它线程(B)正在执行 critical_section. Lock();语句后且 critical_section. Unlock();语句前的语句时,线程A就会等待,直到线程B执行完 critical_section. Unlock ();语句,线程A才会继续执行。
B、使用CEvent类
CEvent类提供了对事件的支持。事件是一个允许一个线程在某种情况发生 时,唤醒另外一个线程的同步对象。例如在某些网络应用程序中,一个线程(记为 A)负责监听通讯端口,另外一个线程(记为B)负责更新用户数据。通过使用 CEvent类,线程A可以通知线程B何时更新用户数据。每一个CEvent对象可以 有两种状态:有信号状态和无信号状态。线程监视位于其中的CEvent类对象的状 态,并在相应的时候釆取相应的操作。
在MFC中,CEvent类对象有两种类型:人工事件和自动事件。一个自动 CEvent对象在被至少一个线程释放后会自动返回到无
您可能关注的文档
- 3、10000亩牡丹可行性研究报告.docx
- 3守护生命完美版.docx
- 3季度患者满意度调查分析报告.docx
- 4#塔吊板式基础臂长50米计算书.docx
- 4--6个月宝宝月龄特征.docx
- 3dsmax教程:装饰镜的建模流程.docx
- 4.2怎样分解力完美版.docx
- 4.二类医疗器械注册综述资料.docx
- 4s店工作总结10篇完美版.docx
- 45-立体几何复习完美版.docx
- 2025年及未来5年摩卡奶油蛋糕项目市场数据调查、监测研究报告.docx
- 2025年及未来5年多用切药机项目市场数据调查、监测研究报告.docx
- 2025年及未来5年铜帽机项目市场数据调查、监测研究报告.docx
- 2025年及未来5年四驱专用全合成多功能润滑脂项目市场数据调查、监测研究报告.docx
- 2025年及未来5年钢板式机床防护罩项目市场数据调查、监测研究报告.docx
- 2025年及未来5年智能无功功率自动补偿控制器项目市场数据调查、监测研究报告.docx
- 2025年及未来5年纵跳测试仪项目市场数据调查、监测研究报告.docx
- 2025年及未来5年得力仪尺项目市场数据调查、监测研究报告.docx
- 2026年国家公考《申论》题(行政执法).pdf
- 2026年国家公务员考试《行测》地市级试题及答案.docx
最近下载
- 人教版九年级上册数学教案全套.docx VIP
- 心态决定一切销售心态培训.pptx VIP
- 办公楼加固工程施工组织设计.docx
- 松下吸尘器MC-RSF680C使用说明书.pdf
- 2025年无人机驾驶员执照涡轮发动机振动监测与故障诊断专题试卷及解析.pdf VIP
- 2025及以后5年中国碳酸钙行业市场发展分析及投资战略前景预测报告.docx
- 幼儿园故事《世界上最棒的礼物》绘本故事PPT课件.pptx VIP
- 质 量 手 册(体系文件,适用JJF1069 计量).doc VIP
- GBT24001-2016-环境管理体系-要求及使用指南.doc VIP
- 世界上最棒的礼物幼儿园儿童故事绘本PPT课件.pptx VIP
原创力文档


文档评论(0)