欢迎来到天天文库
浏览记录
ID:27631151
大小:281.51 KB
页数:24页
时间:2018-12-01
《多线程程序开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第13章多线程程序开发Windows是一个多任务操作系统。在Windows中,每一个进程可以同时执行多个线程,这意味着一个程序可以同时完成多个任务。对于像通信程序这样既要进行耗时的工作,又要保持对用户输入响应的应用来说,使用多线程是最佳选择。当进程使用多个线程时,需要采取适当的措施来保持线程间的同步。本章首先简单介绍了多线程编程的必要性、进程、线程的基本概念,而后重点介绍Win32API中有关线程的几个函数与结构和MFC对多线程的支持,最后介绍线程的通信与同步。13.1多线程的引入很多初学者可能有这样
2、的疑惑:程序为什么要使用多线程,什么时候应该使用多线程?本节将通过一个简单的例子说明这个问题。13.1.1单线程程序的不足在使用MFC开发应用程序时,可能会经常会有一些复杂的耗时很长的计算。这里给出一个简单的模拟程序,通过该程序很容易体会多线程程序设计的必要性。13.1.2问题的解决对上节的程序,如果能够生成两个控制流程,一个负责其中的长时间处理过程即耗时计算,另外一个负责响应用户及系统消息,各司其职,则上述对话框的界面就会得到及时更新。如果一个程序能有多个控制流程,各个控制流程相互独立,并发执行,并
3、且每个流程都有自己特有的任务,分工明确,则单个控制流程可能相对比较简单,但是多个控制流程并发执行将赋予应用程序强大的控制能力。多线程编程就是基于上述的思想而提出的,在后面将详细介绍线程的基本概念及多线程编程的具体实现。13.2多线程编程的基础知识本节主要介绍进程和线程的基本概念、以及Win32API和MFC对多线程编程的支持。13.2.1进程和线程在32位的Windows系统中,采用的是抢先式多任务,这意味着程序对CPU的占用时间是由系统决定的。系统为每个程序分配一定的CPU时间,当程序的运行超过规定
4、时间后,系统就会中断该程序并把CPU控制权转交给别的程序。而与此相关的,有进程与线程两个重要概念。(具体内容请参照本书)13.2.2Spy++工具VisualStadio提供了Spy++工具,通过它可以查看系统正在运行的进程和线程。在系统“开始”→“所有程序”→“MicrosoftVisualStadio6.0”→“MicrosoftVisualStadio6.0Tools”下会发现Spy++工具。(具体内容请参照本书)13.2.3Win32API对多线程编程的支持Win32提供了一系列的API函数来
5、完成线程的创建、挂起、恢复、终结以及通信等工作,(具体内容请参照本书)13.3.4MFC对多线程编程的支持在MFC中,线程分用户界面线程和工作者线程两种。用户界面线程拥有自己的消息队列和消息循环来处理界面消息,可以与用户进行交互。工作者线程没有消息循环,一般用来完成后台工作。(具体内容请参照本书)13.3多线程程序开发前面介绍了多线程程序开发的基础知识,在本节,将通过具体的实例讲解如何使用Win32API函数开发简单的多线程程序以及MFC用户界面线程和工作者线程的开发。13.3.1使用Win32API
6、函数开多线程程序对于简单的多线程程序设计,使用相关的Win32API函数进行开发非常灵活。这里给出一个简单的实例,实例中通过创建3个线程控制对话框窗口中的3个进度条的运动。从实例的开发中,掌握线程的创建与终止操作。(具体内容请参照本书)13.3.2MFC用户界面线程的开发当程序中需要出现两个窗口,而其中均需要包含需要“实时”处理的信息时,就需要创建MFC用户界面线程。本节将实现一个MFC用户界面线程的实例,其中主线程为基于单文档的MFC窗口,在客户窗口实时显示系统时间,而用户界面线程则创建一个非模式对
7、话框,在其中通过进度条模拟一个耗时计算过程。通过本实例掌握MFC用户界面线程的开发过程。(具体内容请参照本书)13.3.3MFC工作者线程的开发MFC工作者线程一般用于耗时计算,正如13.1.1节介绍的那样,当程序需要进行耗时的运算时,往往对用户界面的操作得不到消息响应。这时就可以通过创建MFC工作者线程,将耗时计算单独放在一个新创建的线程中进行。(具体内容请参照本书)13.4线程间的通信通常,一个次要的线程为主线程执行一定的任务,这也暗示这在主线程和次要线程之间需要有一个联系的渠道。有两种方法可以完
8、成这些联系任务:使用全局变量或者使用自定义的消息。本节将介绍这两种方法。13.4.1使用全局变量实现线程间的通信由于属于同一个进程的各个线程共享操作系统分配该进程的资源,因此解决线程间通信最简单的一种方法是使用全局变量。使用全局变量可以实现由主线程向工作线程“发送消息”。由于工作线程没有自己的消息循环,所以主线程不能向工作线程直接发送消息,这时可通过全局变量来实现。13.4.2使用自定义的消息实现线程间的通信在上节介绍了使用全局变量,主线程可以建立与工作
此文档下载收益归作者所有