MFC的多线程编程.ppt

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MFC的多线程编程

MFC Programming * MFC多线程编程 * 基本概念 线程的建立与应用 * 基本概念 多任务:同时运行几个程序 DOS时代:后台操作,Print.EXE(由MS提供)用于后台打印;可以从一定程度上实现了多任务,但是DOS并不是一个多任务的环境,所以勉强实现多任务时限制太多 Windows 3.X:虽然OS有了多任务的支持但是严格的说来对多进程的支持并不够,这主要表现在进程间通信方面提供的支持非常少 WinNT、Windows9X/2K:完全实现了多进程/多线程支持,当然完全提供了多任务的支持 * 进程(Process):普通的解释就是,进程是程序的一次执行: 进程间是独立的,这表现在内存空间,上下文环境 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间 同一进程中的两段代码不能够同时执行; 进程可以有优先级 * 线程(Thread):进程的一条执行路径 一个进程内可包含一个或多个线程 在线程系统中进程也是一个线程;可以将进程理解为一个程序的第一个线程 包含独立的堆栈和CPU寄存器状态 线程处于进程空间内,同一进程所产生的线程共享同一内存空间;使用同一个32位地址空间,每个线程共享所有的进程资源;当进程退出时该进程所产生的线程都会被强制退出并清除 线程有优先级别,线程的执行由系统控制 在多处理器的机器上,多个线程可放到不同的处理器上运行,提高系统的运行效率 * 如果用户的应用需要有多个任务同时进行相应的处理,那么使用多线程是很理想的选择: 如网络文件服务功能的应用, 若采用单线程编程方法:需要循环检查网络的连接、磁盘驱动器的状况,并在适当的时候显示这些数据,必须等到一遍查询后才能刷新数据的显示,对使用者来说,延迟可能很长; 而一个多线程的应用可以把这些任务分给多个线程,一个线程可检查网络,另一个线程管理磁盘驱动器,还有一个线程负责显示数据,三个线程结合起来共同完成文件服务的功能,使用者也可以及时看到网络的变化 * 如果不是在多处理器的机器上,多个线程将分时在同一个处理器上运行,由系统的调度程序来调度线程的运行切换 线程之间的切换要消耗大量的系统资源,降低系统运行效率,所以不要创建不必要的线程 原则:程序有很多事要处理,但还要随时保持注意某些外部事件(可能来自硬件或来自使用者),这时可用多线程来处理 * 类似多线程处理方法: 空闲处理 重载CWinApp类中的OnIdle函数 当程序消息队列刚为空时,系统调用该函数 可用于后台事件处理 交出控制 在长循环中插入PeekMessage(message,NULL , 0 , 0, PM_REMOVE), 定时处理 如程序中有定时处理的事件,可设置定时器,在重载OnTimer函数中处理定时处理事件 可设置多个定时器 定时器的精确度不太高 …… * 线程的建立与应用 多线程的编程在Win32方式下和MFC类库支持下的原理是一致的 基于Win32的多线程应用程序: 执行代码小巧,运行效率高, 但书写代码多 基于MFC类库的多线程应用程序: 可以快速建立起应用,类库为程序员提供了大量的封装类 但类库代码庞大,程序执行离不开这些代码 MFC用CWinThread对象来表示所有线程 * * 在MFC中,线程分为两种: 用户接口线程:用户接口线程常用于接收用户的输入,处理相应的事件和消息。在用户接口线程中,包含一个消息处理循环,其中CWinApp就是一个典型的例子,它从CWinThread派生,负责处理用户输入产生的事件和消息 辅助线程:常用于任务处理,比如计算,它不要求用户输入,对用户而言,它在后台运行 * 辅助线程: 一个基本函数代表了一个线程 经创建线程并启动线程后,线程进入运行状态 如果线程用到共享资源,则需要进行资源同步处理 * 辅助线程编程: 启动线程:AfxBeginThread 线程运行:UINT ThreadProc(LPVOID pParam) 线程挂起: CWinThread::SuspendThread 线程恢复: CWinThread:: ResumeThread 线程退出:函数退出 * 共享资源同步处理: 在存取共享资源时,都需要保护共享资源,以免引起冲突造成错误。 MFC提供了几个同步对象类, CSyncObject为其它四个类的基类,后四个类分别对应了四个Win32 API同步对象: SyncObject, CEvent(事件),CCriticalSection(排斥区), CMutex(互斥体),CSemaphore(信号) * 同步对象类的使用: 先建立同步对象 在访问共享资源时先调用函数锁定共享资源 访问资源 访问资源结束释放共享资源的控制权 * 大量复杂计算中:打印、字处理、图形图象、动画和文件管理等 串口通信网络通

文档评论(0)

liwenhua00 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档