MFC 教程 第12章进程与线程的管理.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文档。上传文档
查看更多
MFC 教程 第12章进程与线程的管理

第12章 进程与线程的管理 本章主要内容: 进程、线程和优先级 工作线程和用户界面线程 线程同步 线程通讯 12.1?进程、线程和优先级 进程是拥有应用程序所有资源的对象。从程序设计的角度,进程可以看作一个正在运行的应用程序的实例 .每个进程是由私有的虚拟地址空间,代码,数据,和其他系统资源组成. 线程是进程中一个独立的可执行单元,相当于一个子函数.一个程序一般由多个函数组成,可将一些函数以线程的形式实现. 一个应用程序(进程)至少要有一个线程,这个线程被叫做主线程。当然,根据需要,一个进程可以创建任意数目的从线程,用这些从线程执行这个进程的并发任务。 12.2? 工作线程和 用户界面线程 参数pfnThreadProc是一个指向线程函数的指针,参数pParam为启动线程时传递给线程函数的入口参数.其他几个参数用于设置线程优先级,线程的堆栈大小,创建时是否立即运行及线程的安全属性,这4个参数通常使用默认值. 如果创建成功,函数AfxBeginThread()返回一个指向CWinThread对象的指针,否则返回NULL.通过该指针可调用CWinThread类的成员函数. 线程创建后开始启动运行,但如果dwCreationFlags参数为CREATE_SUSPENDED,线程并不立即执行,而是先挂起,等到调用ResumeThread()函数才开始启动线程.CWinThread类定义了使线程挂起和恢复执行的函数,函数SuspendThread()用来挂起线程,暂停线程的执行,函数ResumeThread()用来恢复线程的执行. 当从线程函数返回后,线程自动终止. 线程的执行过程中终止: AfxEndThread()或ExitThread() 终止自身的运行. 线程外强制终止: TerminateThread() 例12_1 编写一个应用程序,当在程序窗口按下鼠标左键,启动一个线程,该线程可在屏幕上显示一个信息框. 1)创建应用程序框架 2)在视图类实现文件中编写一个线程函数. 例: 编写一个创建工作线程的程序,当执行”线程|工作线程”菜单命令时启动一个工作线程,将一串小写字母转化为大写字母. 用户界面线程的创建 用户界面线程与用户界面有关,可以具有自己的窗口界面.用户界面线程通常用来处理用户的输入并响应各种事件和消息,它是通过自己的消息泵获取从系统接受到的消息.MFC将为该线程增加一个消息循环,以便能够处理收到的消息. MFC把程序处理消息的窗口函数封装在CCmdTarget类中,在这个类的基础上,又封装了创建线程的一些操作,从而派生了CWinThread类.因此,建用户界面线程,需要从CWinThread派生一个新类,重写类的InitInstance,ExitInstance及Run等函数. 其中参数pThreadClass指向一个CRuntimeClass对象,该对象是用RUNTIME_CLASS宏从CWinThread的派生类创建的. 例12-2编写一个应用程序,当用户在程序主窗口按下左键时,启动一个用户界面线程,当用户在线程窗口界面上按下鼠标左键,会弹出一个信息框. 例:在应用程序TestThread中创建用户界面线程,用户可多次执行”线程|用户界面线程”令创建多个用户界面线程. 12.3??? 线程同步 12.3.2 事件对象 事件对象的状态: TRUE:允许系统启动运行正在等待的线程 FALSE:禁止系统启动运行正在等待的线程 CEvent类包含在头文件”afxmt.h”中,构造函数为: CEvent(BOOL bInitiallyOwn=FALSE, BOOL bManualReset=FALSE, LPCTSTR lpszName=NULL, LPSECURITY_ATTRIBUTES lpsaAttribute=NULL); bInitiallyOwn:初始状态是否为发信状态; bManualReset:事件对象是自动事件对象还是 手工事件对象。 lpszName:事件对象的名称。 CEvent类的方法: SetEvent() 设置事件为有效状态,并释放其他正在等待的线程。 PulseEvent()设置事件为有效状态,并释放其他正在等待的线程,然后把事件设置为无效状态 ResetEvent() 设置事件为无效状态。 Lock() 一般用在线程内部,强制线程进入等待状态,一旦事件变为发信状态,等待的线程在恢复运行。 1.自动事件对象的使用 若用CEvent类构造函数的默认参数,则定义的对象为自动事件对象。初始状态未发信,可使用成员函数SetEvent变为发信状态,使处于等待状态线程中的第一个线程恢复运行

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档