Windows程序设计教程 教学课件 作者 郭皞岩 屈景辉 廖琪梅 第14章多线程.ppt

Windows程序设计教程 教学课件 作者 郭皞岩 屈景辉 廖琪梅 第14章多线程.ppt

  1. 1、本文档共133页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Windows程序设计教程 第14 章多线程 线程(Thread)是程序中一个控制的执行流程,属进程的一个实体。 多任务操作系统就是采用多进程和多线程机制,即在同一时间内有多个进程在运行,一个进程可以有若干个线程即为多线程。 采用多线程技术的目的是提高程序运行速度和CPU资源利用率。 本章主要讨论MFC的多线程程序设计方法。 14.1 多线程基础 多线程技术是多任务并发程序设计的基础,是提高程序运行速度和增强数据处理能力的重要技术手段。 实际中,常常采用多线程编程技术提高应用程序的性能。 14.1.1 进程与线程 进程(Process)是程序在计算机内存中的运行活动,是系统资源分配和调度的基本单位,是程序(Program)即指令集合和相关数据的动态体现。 进程和程序的区别如下: (1)进程描述的是程序的动态行为,而程序是一个指令序列和相关数据的静态描述; (2)进程是程序的一次运行活动,具有暂时性,而程序可以脱离机器长期保存,具有永久性; (3)一个程序可以对应多个进程,一个进程也可以有多个程序,二者没有确定的对应关系; 进程是为了刻画程序内部运行状态而引入的一个概念。 线程是由进程创建的可执行单元,线程依附于进程的存在而共享进程的内存空间,由应用程序提供多个线程执行控制。 线程也可以创建线程。线程和进程一样具有一个生存周期,在这个生存周期中,总是处于某种状态之中,诸如就绪态、运行态或等待(阻塞)态。 当进程退出运行以后,线程也随之消失,所占用的资源也一同释放。 所以,在下列情况可以采用多线程编程技术: (1)为了提高运行效率,在同一时间内运行多个任务时; (2)处理数据量比较大,需要等待时; (3)同一程序内没有顺序关系的代码段时; (4)应用系统采用客户/服务器机制时。 程序设计使用多线程还要注意以下几点: (1)多线程实际是多个程序段同时存在并运行于内存中,不要让太多的线程使系统逻辑结构变得复杂,线程并不是越多越好; (2)有些情况下需要处理线程的同步问题; (3)搞清楚线程的优先级设置和调度规则; (4)搞清楚线程间的数据交换和通讯问题。 14.1.2 线程分类 MFC将Windows的线程处理功能封装成一个CWinThread线程类,使程序设计更加方便简捷。 MFC将Windows线程分为两类:一类是用于人机交互、处理用户输入的线程,称为用户界面线程(User-Interface Threads);另一类是完成不需要用户干预的或后台执行的操作,称为工作者线程或辅助线程(Worker Threads)。 但对于Windows API来说,由于它没有引入类的概念,所以没有用户界面线程和工作者线程之分,将二者等同处理,统称为线程。 14.2 多线程编程 程序设计中采用多线程编程技术,可以有两种途径实现。 一是采用Windows API提供的进程创建函数CreateThread()进行创建,用挂起、恢复和终止、优先级控制等函数实现线程管理;二是采用MFC提供的AfxBeginThread()函数创建,由CWinThread类进行管理。 CWinThread封装了Win32 API有关线程操作的函数。 本节在讲述Win32 API线程处理函数的基础上,主要讨论用MFC提供的线程函数创建工作者线程和用户界面线程的方法。 用户界面线程和工作者线程的主要区别是:前者需要响应用户输入和处理系统产生的事件与消息,拥有自己的消息队列和消息循环;而后者不需要处理这些消息和事件,没有消息队列和消息循环。 14.2.1 Win32 API线程处理 Windows API提供的线程操作函数有创建、挂起、恢复、终止以及优先级控制等。下面简单介绍这几个函数。 1.线程创建 函数原型如下: HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags,

文档评论(0)

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

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

1亿VIP精品文档

相关文档