HANDLE
这其实是一个UINT(随便提一下,初学者往往对VC代码中各种古怪的符号、类型标记/宏等百思不得其解,其实它们大多来自基本类型的#define或者typedef,请将光标移到这些符号上(譬如HANDLE),然后按下F12,编译器自会把你带到它的声明处,反复使用几次,你终会见到它的原貌,然后长吁一口气:原来不过如此而已。没用过的初学者请牢记:F12)。很多初学者把HANDLE与指针的理解混淆,总想知道一个HANDLE代表一个什么对象,我的建议是不要去理解为是某对象的指针,而就是理解为一个整数索引(事实上也是),就好像一个数组的下标一样。Windows系统核心中主要是几张大表,这样一个整数索引就是标记目标(窗口、线程、某DC资源等)在这个表中的位置,供操作系统访问时查询用。
DLL
DLL的一个特点就是可以动态加载(顾名思义),即在主程序(我更喜欢称为客户程序)需要该模块时才由操作系统加载到内存。毕竟一个大型应用程序我们经常使用到的功能并不多,这样一些不常用的功能模块(DLL)在程序运行时一般将不被载入,极大地节省了内存开销。DLL同时也是目前最常用的分发模块的方法,便于彼此协作。程序中对DLL的调用主要有两种方法:1 针对使用DEF文件导出函数的DLL,使用API函数LoadLibrary(“DLLModuleName")加载,然后使用GetProcAddress()得到函数指针,进而调用 2当DLL编译选项被设为“MFC扩展DLL”时,可以直接将类、函数等导出,客户程序使用同一份头文件声明,加入对应的lib链接库,即可在客户程序中直接使用DLL中的类或函数,无需LoadLibrary。 注:关于DLL的三种形式(普通,MFC DLL,MFC 扩展DLL)的区别我一时拿不真切,往知情者为我修正补全。
关于"进程\线程",在这里我谈一些我个人的体会和理解作为补充,准确定义请参考操作系统权威书籍
Process 进程
进程不是一个静态概念,所以它也不是"运行的程序的实体",进程是一个动态的概念,包括从进程的创建申请,PCB(Process Control Block进程控制块,一般操作系统实现为一个表格)的创建,地址空间的内存分配,模块代码载入并执行,执行完以后进行撤销,整个过程被称为"进程"。在Win32下,一个进程有4G的逻辑空间。
Thread 线程
为了更有效的提高CPU的利用率,更好地实现多任务并发,微软将进程进行进一步分割,实现了CPU任务调度的最小单位:线程。一个进程拥有至少一个线程。我们在实现多任务并发的时候通常是建立一个线程(建立线程的系统开销要小于进程),线程是以我们自己的一个函数作为入口,函数执行完毕自动撤销(当然你也可以在执行过程中强制结束该线程)。顺便提一下,在UNIX下并没有线程这个概念,想来是因为UNIX主要是以多进程的并发服务为主(所以它更适合于做服务器),系统运行时通常已经有了太多的进程,所以没有必要再对进程进行细化,因为这样做甚至会降低系统效率(CPU调度不过来),当然,这是我个人的猜想:)
posted on 2006-05-14 12:49
太极虎~宏 阅读(98)
评论(0) 编辑 收藏 引用