Visual C++ 基本原理 (2).doc

上传人:桔**** 文档编号:544042984 上传时间:2024-03-11 格式:DOC 页数:38 大小:252KB
返回 下载 相关 举报
Visual C++ 基本原理 (2).doc_第1页
第1页 / 共38页
Visual C++ 基本原理 (2).doc_第2页
第2页 / 共38页
Visual C++ 基本原理 (2).doc_第3页
第3页 / 共38页
Visual C++ 基本原理 (2).doc_第4页
第4页 / 共38页
Visual C++ 基本原理 (2).doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《Visual C++ 基本原理 (2).doc》由会员分享,可在线阅读,更多相关《Visual C++ 基本原理 (2).doc(38页珍藏版)》请在金锄头文库上搜索。

1、Visual C+ 基本原理 / Name: Easyright/ Date: 8-1-2003/ Homepage: http:/ Email: FAQ问:阅读以下文章需要具备哪些知识?答:只要会开机就行了,如果大家有C+和面向对象(Object-Oriented)的基础知识,会有事半功倍的效果。问:必须具备哪些软件?答:Windows 98, Windows NT, Windows 2000中的任意一种,另外再加上Visual C+ 5.0或6.0。由于我没有测试过Windows 95和Visual C+ 5.0以下的版本,所以不知道他们可不可用。问:为什么用Visual C+?答:因为V

2、C功能强而多。基本概念心情随笔:其实这一章是最枯燥的,概念又多,本来我不想写这一章的,但为了照顾初学者,我觉得还是有必要讲一 下。由于这一章是属于”入门篇”的,所以大家只需要了解以下内容就行了,不需要深入研究其原理,到了”高级篇”时,我们还会重新仔细分析其原理的,希望大 家不会被这一章的内容吓跑,有问题就去本站的留言本留言吧。首先我们要了解以下概念:应用程序(Application),他就是由指令(Instruction)组成的可以运行的文件。进程(Process),有时和应用程序的意思一样,但在通常的情况下,进程是指一个正在运行的应用程序,正因为这样,进程由以下部分组成:1、一个可以执行的程

3、序2、位于内存(Memory)中的私有地址空间3、系统资源(System Resource),例如文件(File), 管道(Pipe), 通讯端口(Communications Port), 信号(Semaphore)4、至少还要有1个线程(Thread), 线程是最基本的执行单位。因为多个进程是可以同时存在时,所以Windows操作系统(Operating System)必须给进程提供保护,以防止他们冲突。物理内存(Physical Memory),即你的计算机的实际内存,例如我现在用的电脑的内存是128M,物理内存的容量是达不到程序的要求的,于是就产生了虚拟内存(Virtual Memor

4、y)。虚拟内存(Virtual Memory), 不是真正的内存,它通过映射(Map)的方法,使可用的虚拟地址(Virtual Address)达到4G(2的32次方),每个应用程序可以被分配2G的虚拟地址,剩下的2G留给操作系统自己用。在Windows NT中,应用程序可以有3G的虚拟地址。简单的说,虚拟内存的实现方法和过程是:1、当一个应用程序被启动时,操作系统就创建一个新进程, 并给每个进程分配了2G的虚拟地址(不是内存,只是地址);2、虚拟内存管理器(Virtual Memory Manager)将应用程序的代码(Code)映射到那个应用程序的虚拟地址中的某个位置,并把当前所需要的代码

5、读取到物理地址中。注意,虚拟地址和应用程序代码在物理内存中的位置是没有关的;3、如果你有使用动态链接库(Dynamic-Link Library,即DLL)的话,DLL也被映射到进程的虚拟地址空间,在有需要的时候才被读入物理内存;4、其他项目(例如数据,堆栈等)的空间是从物理内存分配的,并被映射到虚拟地址空间中;5、应用程序通过使用它的虚拟地址空间中的地址开始执行,然后虚拟内存管理器把每次的内存访问映射到物理位置。如果大家看不明白上面的步骤也不要紧(似乎超出了入门篇的范围),但大家要明白以下两点:1、应用程序是不会直接访问物理地址的;2、虚拟内存管理器通过虚拟地址的访问请求,控制所有的物理地址

6、访问;使用虚拟内存的好处是:简化了内存的管理,并可以弥补物理内存的不足;可以防止在多任务(Multitasking)环境下的各个应用程序之间的冲突。线程(Thread),是最基本的执行单位,CPU时间就是分配给每个线程的。每个进程一开始时只有一个线 程,但每个线程都可以产生出其他线程,前者叫做父线程(Parent Thread),后者叫做子线程(Child Thread)。每个执行的线程都有自己的虚拟输入队列(Virtual Input Queue),用来处理来自硬件、处理器(Processor)或操作系统的消息(Message)。这些队列都是异步的,也就是说,当处理器发送一个消 息给另外一个

7、线程的队列时,发送函数不用等待其他线程处理该消息就可返回,而接收消息的线程可以等到该线程准备好时再访问并处理接收到的消息。多线程(Multithread),如果一个进程中有多个线程同时存在,就叫做多线程了。多任务(Multitasking),即多个程序看起来好像是在同时执行,其实并不是同时的,只不过因为时间太短,人类感觉不出来而已。其原理是操作系统分配给每个线程一个非常短(大约百分之秒)的时间片,每个线程轮流切换执行,这个过程叫做场境转换(Context Switching)。场境转换(Context Switching),是指:1、运行一个线程直到该线程的时间片用完,或者这个线程必须等待其他

8、的资源;2、保存这个线程的场境;3、取出其他线程的场境;4、只要有线程在等待执行,就会不停的重复以上过程。Raw Input Thread(RIT), 是指用来接收所有由键盘和鼠标产生的事件(Event)的线程,它是一个特殊的系统线程,每当RIT接收到处理器发出的硬件(Hardware)事件,它 就把那些事件放到相应线程的虚拟输入队列中。因此,应用程序的线程通常是不用等待它的硬件事件的。事件驱动(Event-Driven)编程,Windows-based的应用程序运行后,就会一直等待,直 到有用户发布命令(例如:按一个按钮或选中一个菜单)之类的事件发生,这就叫做事件驱动编程(Event-Dri

9、ven Programming)。它同DOS下的应用程序的最大区别就是:DOS下的应用程序是通过命令行加参数的方法来控制应用程序的执行,而Windows -based的应用程序是通过图形用户界面(GUI)来控制应用程序的执行。用户所产生的事件,在程序里就会转化为消息,不同的事件产生不同的消息,从而 可以产生不同的响应。终于讲完这一节了,大家看得明白吗?如果不明白的话,那就一字一句的从头到尾再看一遍吧。如果还不明白,那就请跳过这一节吧,我在后面的章节中还会逐步解释这些概念的。在本章的最后一节我将会举一个具体的程序来说明Windows-based应用程序的结构和组成元素。以下是本节出现的专业名词应

10、用程序 = Application指令 = Instruction进程 = Process内存 = Memory系统资源 = System Resource文件 = File管道 = Pipe通讯端口 = Communications Port信号 = Semaphore线程 = Thread物理内存 = Physical Memory虚拟内存 = Virtual Memory映射 = Map虚拟地址 = Virtual Address虚拟内存管理器 = Virtual Memory Manager代码 = Code动态链接库 = Dynamic-Link Library,即DLL数据 = D

11、ata堆栈 = Stack多任务 = Multitasking父线程 = Parent Thread子线程 = Child Thread多线程 = Multithread场境转换 = Context Switching虚拟输入队列 = Virtual Input Queue处理器 = Processor操作系统 = Operating System消息 = Message队列 = QueueRaw Input Thread = RIT事件 = Event硬件 = Hardware事件驱动 = Event-Driven事件驱动编程 = Event-Driven Programming图形用户界面

12、 = GUIWindows下的程序的结构和组成元素Windows下的程序的基本组成元素是代码, 用户界面资源(User Interface Resource)和动态链接的库模块(Library Module)。代码,是应用程序的主要内容,Windows下的应用程序必须要有两个函数:1、WinMain,它为操作系统提供了进入点(Entry Point),是所有Windows-Based应用程序都必须要有的函数。它也用来创建初始Window和启动Message检索;2、Window Procedure,它用于处理所有从操作系统发送到Window的Message,每一个Window都有一个相关联的W

13、indow Procedure。Window Procedure用来决定Window的Client Area(即客户窗口,例如Notepad中用来写字的空白部分)显示什么以及如何响应用户的输入。Window Procedure处理Message时,既可以用专门添加的代码来处理Message,也可以直接把Message传递给默认的Window ProcedureDefWindowProc。一个Windows-Based应用程序可以包含多个不同名的Window Procedure。 用户界面资源,菜单(Menu),对话框(Dialog box)等图形用户界面的元素,就叫做资源。它们被当成模板(Te

14、mplate)储存在相应的可执行文件或DLL文件的只读(Read-Only)区域,当有需要时,Windows就调用这个资源区域并动态创建所需要的GUI元素。主要有以下几种资源:Accelerator(快捷键表), 储存快捷键和相应的命令Bitmap(位图),一种图形格式Diablo Box,包含对话框的控件(Control), 布局和属性的细节Icon(图标),一种特殊的位图Menu(菜单),包含菜单及其选项的文本和布局String Table(字符串表),储存字符串及其IDToolbar(工具栏),包含工具栏的布局和按钮的位图Version(版本),储存程序的状态信息,例如程序名,作者,版权

15、,版本号等Cursor(光标),包含用于绘制光标的特殊的位图库模块,主要是指在运行时可以被动态链接的二进制文件,即DLL。默认的Window ProcedureDefWindowProc,是Windows系统提供的一个函数,用于处理某些通用的Win32-based应用程序的 Messages(例如最大化、最小话窗口,显示目录等)。如果DefWindowProc不能处理该Message,那么它就被忽略。当一个应用程序被启动时,将会按顺序发生下列事件(上一节也提到过这个问题)1、操作系统创建一个新进程和一个起始线程;2、应用程序的代码被载入内存;3、DLL也被载入内存(如果有的话);4、从物理内存分配其他项目(例如数据,堆栈等)的空间,并被映射到虚拟地址空间中;5、应用程序开始执行。在Windows-Based应用程序中,Windows是应用程序和用户之间传递信息的主要方法。Windows-Based的应用程序为了接收从系统队列传来的Message,是通过以下方法实现的:1、当Windows-Based的应用程序启动后,操作系统和这

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号