




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第13章 多线程程序开发 Windows是一个多义务操作系统。在Windows中,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个义务。对于像通讯程序这样既要进展耗时的任务,又要坚持对用户输入呼应的运用来说,运用多线程是最正确选择。当进程运用多个线程时,需求采取适当的措施来坚持线程间的同步。 本章首先简单引见了多线程编程的必要性、进程、线程的根本概念,而后重点引见Win32 API中有关线程的几个函数与构造和MFC对多线程的支持,最后引见线程的通讯与同步。13.1 多线程的引入 很多初学者能够有这样的疑惑:程序为什么要运用多线程,什么时候应该运用多线程?本节将经过一个简单的例子
2、阐明这个问题。13.1.1 单线程程序的缺乏 在运用MFC开发运用程序时,能够会经常会有一些复杂的耗时很长的计算。这里给出一个简单的模拟程序,经过该程序很容易领会多线程程序设计的必要性。13.1.2 问题的处理 对上节的程序,假设可以生成两个控制流程,一个担任其中的长时间处置过程即耗时计算,另外一个担任响运用户及系统音讯,各司其职,那么上述对话框的界面就会得到及时更新。假设一个程序能有多个控制流程,各个控制流程相互独立,并发执行,并且每个流程都有本人特有的义务,分工明确,那么单个控制流程能够相对比较简单,但是多个控制流程并发执行将赋予运用程序强大的控制才干。多线程编程就是基于上述的思想而提出的
3、,在后面将详细引见线程的根本概念及多线程编程的详细实现。13.2 多线程编程的根底知识 本节主要引见进程和线程的根本概念、以及Win32 API和MFC对多线程编程的支持。13.2.1 进程和线程 在32位的Windows系统中,采用的是抢先式多义务,这意味着程序对CPU的占用时间是由系统决议的。系统为每个程序分配一定的CPU时间,当程序的运转超越规定时间后,系统就会中断该程序并把CPU控制权转交给别的程序。而与此相关的,有进程与线程两个重要概念。详细内容请参照本书13.2.2 Spy+工具 Visual Stadio提供了Spy+工具,经过它可以查看系统正在运转的进程和线程。在系统“开场“一
4、切程序“Microsoft Visual Stadio 6.0“Microsoft Visual Stadio 6.0 Tools下会发现Spy+工具。详细内容请参照本书13.2.3 Win32 API对多线程编程的支持 Win32提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通讯等任务,详细内容请参照本书13.3.4 MFC对多线程编程的支持 在MFC中,线程分用户界面线程和任务者线程两种。用户界面线程拥有本人的音讯队列和音讯循环来处置界面音讯,可以与用户进展交互。任务者线程没有音讯循环,普通用来完成后台任务。详细内容请参照本书13.3 多线程程序开发 前面引见了多线程程序开
5、发的根底知识,在本节,将经过详细的实例讲解如何运用Win32 API函数开发简单的多线程程序以及MFC用户界面线程和任务者线程的开发。13.3.1 运用Win32 API函数开多线程程序 对于简单的多线程程序设计,运用相关的Win32 API函数进展开发非常灵敏。这里给出一个简单的实例,实例中经过创建3个线程控制对话框窗口中的3个进度条的运动。从实例的开发中,掌握线程的创建与终止操作。详细内容请参照本书13.3.2 MFC用户界面线程的开发 当程序中需求出现两个窗口,而其中均需求包含需求“实时处置的信息时,就需求创建MFC用户界面线程。本节将实现一个MFC用户界面线程的实例,其中主线程为基于单
6、文档的MFC窗口,在客户窗口实时显示系统时间,而用户界面线程那么创建一个非方式对话框,在其中经过进度条模拟一个耗时计算过程。经过本实例掌握MFC用户界面线程的开发过程。详细内容请参照本书13.3.3 MFC任务者线程的开发 MFC任务者线程普通用于耗时计算,正如13.1.1节引见的那样,当程序需求进展耗时的运算时,往往对用户界面的操作得不到音讯呼应。这时就可以经过创建MFC任务者线程,将耗时计算单独放在一个新创建的线程中进展。详细内容请参照本书13.4 线程间的通讯 通常,一个次要的线程为主线程执行一定的义务,这也暗示这在主线程和次要线程之间需求有一个联络的渠道。有两种方法可以完成这些联络义务
7、:运用全局变量或者运用自定义的音讯。本节将引见这两种方法。13.4.1 运用全局变量实现线程间的通讯 由于属于同一个进程的各个线程共享操作系统分配该进程的资源,因此处理线程间通讯最简单的一种方法是运用全局变量。运用全局变量可以实现由主线程向任务线程“发送音讯。由于任务线程没有本人的音讯循环,所以主线程不能向任务线程直接发送音讯,这时可经过全局变量来实现。13.4.2 运用自定义的音讯实现线程间的通讯 在上节引见了运用全局变量,主线程可以建立与任务线程的通讯,即控制任务线程的运转。反过来,任务线程如何与主线程建立联络呢?最简单的实现这种联络的方法是在程序中运用自定义音讯。13.5 线程的同步 虽
8、然多线程能给程序的开发设计带来很多便利,但是也有不少问题需求处理。使隶属于同一个进程的各线程协调一致地任务称之为线程的同步。MFC提供了多种同步对象,如CEvent、CCriticalSection、CSemaphore、CMutex等。另外,MFC也提供了线程同步辅助类CSingleLock和CMutiLock。经过这些类,可以比较容易地做到线程同步。13.5.1 等待函数 在引见MFC同步对象实现线程同步之前,首先引见一下用于监测同步对象形状的等待函数。 Win32 API提供了一组能使线程阻塞其本身执行的等待函数。这些函数只需在作为其参数的一个或多个同步对象产生信号时才会前往。在超越规定
9、的等待时间后,不论有无信号,函数也都会前往。在等待函数未前往时,线程处于等待形状,此时线程只耗费很少的CPU时间。详细内容请参照本书13.5.2 CEvent类实现线程同步 事件对象Event是最简单的同步对象,它包括有信号和无信号两种形状。在线程访问某一资源之前,也许需求等待某一事件的发生,这时用事件对象最适宜。例如,只需在通讯端口缓冲区收到数据后,监视野程才被激活。13.5.3 运用CEvent类实现线程同步实例 本节将给出一个运用CEvent类实现线程同步的详细实例。本实例经过读取一个字符串模拟读文件操作Sleep函数,在读到第10个字符时,启动一个任务线程,将字符串的小写字符转换为大写
10、字符,即模拟写文件操作。显然,二者需求同步,即在用户读文件的过程中,虽然任务线程启动,但不能对数据进展操作,只需当读数据终了后,才干进展写操作。这里的同步就采用CEvent对象来实现。详细内容请参照本书13.5.4 CCriticalSection类实现线程同步 当多个线程访问一个独占性共享资源时,可以运用Critical Section临界区对象。任一时辰只需一个线程可以拥有临界区对象,拥有临界区的线程可以访问被维护起来的资源或代码段,其他希望进入临界区的线程将被挂起等待,直到拥有临界区的线程放弃临界区时为止。因此,任一时辰,只需一个线程可以拥有临界区对象,而只需拥有临界区对象的线程才可以访
11、问受维护的数据。详细内容请参照本书13.5.5 CCriticalSection类实现线程同步实例 本节给出一个运用CCriticalSection类实现线程同步的详细实例。实例创建两个任务线程分别实现读和写一个全局变量,经过运用CCriticalSection类对象,保证同一时辰只需一个线程可以访问临界区资源即全局变量。另外,经过本实例,掌握任务线程的创建和销毁操作。详细内容请参照本书13.5.6 CSemaphore类实现线程同步 运用信号量对象Semaphore也可以实现线程同步。信号量对象维护一个从0开场的计数,在计数值大于0时对象是有信号的,而在计数值为0时那么是无信号的。经过运用信号量对象可用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安职辅导员考试题及答案
- 幼儿园保育知识试题及答案
- 宫颈癌筛查培训试题及答案
- 2025年汽车行业供应链风险管理与企业风险管理策略实施报告001
- 2025年工业互联网平台网络切片技术在工业互联网平台生态构建与技术创新中的应用实践报告
- 解析卷-河南省义马市中考数学真题分类(平行线的证明)汇编综合测评试题(解析卷)
- 2025至2030年中国润唇膏行业市场深度分析及投资策略咨询报告
- 2025至2030年中国食糖行业发展监测及投资战略规划研究报告
- 邮政行业职业技能鉴定考前冲刺练习试题【夺分金卷】附答案详解
- 2025年度深圳知识产权保护简易劳动合同范本
- 人教版初中全部英语单词表(含音标)
- Magic Tree House 神奇树屋词汇大全
- 《心系国防 有你有我》国防教育主题班会课件
- 普通外科临床路径(2019年版)
- 教师工作法律风险防范省公开课金奖全国赛课一等奖微课获奖课件
- A类《职业能力倾向测验》2024年事业单位考试湘西土家族苗族自治州泸溪县统考试题含解析
- 渭南万泉330千伏变电站-雷家洼110千伏线路工程环境影响报告
- 新编文学理论课件
- 小学数学北师大版三年级下册递等式计算练习300题及答案
- 企业后勤安全管理培训课件
- 驾驶员安全教育三超一疲劳驾驶案例培训课件
评论
0/150
提交评论