mfc 多线程程序设计

mfc 多线程程序设计

ID:11421657

大小:93.50 KB

页数:18页

时间:2018-07-11

mfc  多线程程序设计_第1页
mfc  多线程程序设计_第2页
mfc  多线程程序设计_第3页
mfc  多线程程序设计_第4页
mfc  多线程程序设计_第5页
资源描述:

《mfc 多线程程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、MFC多线程程序设计Multi-threadedProgramminginMFC线程(thread),是执行线程(threadofexecution)的简单称呼。"Thread"这个字的原意是「线」。中文字里头的「线程」也有「线」的意思,所以我采用「线程」、「执行线程」这样的中文名称。如果你曾经看过「多线」这个名词,其实就是本章所谓的「多线程」。我曾经在第1章以三两个小节介绍Win32环境下的进程与执行线程观念,并且以程序直接调用CreateThread的形式,示范了几个Win32小例子。现在我要更进一步从

2、操作系统的层面谈谈执行线程的学理基础,然后带引各位看看MFC对于「执行线程」支持了什么样的类别。然后,实际写个MFC多线程程序。从操作系统层面看执行线程书籍推荐:如果要从操作系统层面来了解执行线程,MattPietrek的Windows95SystemProgrammingSECRETS(Windows95系统程序设计大奥秘/侯俊杰译/旗标出版)无疑是最佳知识来源。Matt把操作系统核心模块(KERNEL32.DLL)中用来维护执行线程生存的数据结构都挖掘出来,非常详尽。这是对执行线程的最基础认识,直达其灵

3、魂深处。你已经知道,CreateThread可以产生一个执行线程,而「线程」的本体就是CreateThread第3个参数所指定的一个函数(一般我们称之为「执行线程函数」)。这个函数将与目前的「执行事实」同时并行,成为另一个「执行事实」。执行线程函数的执行期,也就是该执行线程的生命期。操作系统如何造成这种多任务并行的现象?执行线程对于操作系统的意义到底是什么?系统如何维护许多个执行线程?执行线程与其父亲大人(进程)的关系如何维持?CPU只有一个,执行线程却有好几个,如何摆平优先权与排程问题?这些疑问都可以在下

4、面各节中获得答案。三个观念:模块、进程、执行线程试着回答这个问题:进程(process)是什么?给你一分钟时间。zzzzz...你的回答可能是:『一个可执行档执行起来,就是一个进程』。唔,也不能算错。但能不能够有更具体的答案?再问你一个问题:模块(module)是什么?可能你的回答还是:『一个可执行档执行起来,就是一个模块』。这也不能够算错。但是你明明知道,模块不等于进程。KERNEL32DLL是一个模块,但不是一个进程;ScribbleEXE是一个模块,也是一个进程。我们需要更具体的资料,更精准的答案。如

5、果我们能够知道操作系统如何看待模块和进程,就能够给出具体的答案了。一段可执行的程序(包括EXE和DLL),其程序代码、资料、资源被加载到内存中,由系统建置一个数据结构来管理它,就是一个模块。这里所说的数据结构,名为ModuleDatabase(MDB),其实就是PE格式中的PE表头,你可以从WINNT.H档中找到一个IMAGE_NT_HEADER结构,就是它。好,解释了模块,那么进程是什么?这就比较抽象一点了。这样说,进程就是一大堆拥有权(ownership)的集合。进程拥有地址空间(由memorycont

6、ext决定)、动态配置而来的内存、文件、执行线程、一系列的模块。操作系统使用一个所谓的ProcessDatabase(PDB)数据结构,来记录(管理)它所拥有的一切。执行线程呢?执行线程是什么?进程主要表达「拥有权」的观念,执行线程则主要表达模块中的程序代码的「执行事实」。系统也是以一个特定的数据结构(ThreadDatabase,TDB)记录执行线程的所有相关资料,包括执行线程区域储存空间(ThreadLocalStorage,TLS)、讯息队列、handle表格、地址空间(MemoryContext)等

7、等等。最初,进程是以一个执行线程(称为主执行线程,primarythread)做为开始。如果需要,行程可以产生更多的执行线程(利用CreateThread),让CPU在同一时间执行不同段落的码。当然,我们都知道,在只有一颗CPU的情况下,不可能真正有多任务的情况发生,「多个执行线程同时工作」的幻觉主要是靠排程器来完成--它以一个硬件定时器和一组复杂的游戏规则,在不同的执行线程之间做快速切换动作。以Windows95和WindowsNT而言,在非特殊的情况下,每个执行线程被CPU照顾的时间(所谓的timesl

8、ice)是20个milliseconds。如果你有一部多CPU计算机,又使用一套支持多CPU的操作系统(如WindowsNT),那么一个CPU就可以分配到一个执行线程,真正做到实实在在的多任务。这种操作系统特性称为symmetricmultiprocessing(SMP)。Windows95没有SMP性质,所以即使在多CPU计算机上跑,也无法发挥其应有的高效能。图14-1表现出一个进程(PDB)如何透过「MODR

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。