理解 COM 套间
2006-07-22 22:58:03 来源:WEB开发网一、关于多线程(Multithreading)
子曰:本立道生。也就是说我们明白事物所存在的原因,自然也就明白事物是怎么回事了。如果我们清楚了套间(Apartment)的产生原因,再去理解套间,就容易许多了。我们先来看看,为什么需要套间?套间是为解决多线程中使用组件而产生的,首先我们来了解一下多线程。
1、理解进程(Processes)和线程(Threading)
理解线程,先从进程(Processes)开始,一般书上对进程的描述都比较抽象,都说进程是一个运行的程序的实例,进程拥有内存,资源。我这儿试着用一段汇编程序来解释一下进程,看看能不能帮你加深一下印象。我们先来看一段简单的汇编程序(你不理解汇编的话,建议找本书看看,一点不懂汇编,很难对其它高级语言有太深的理解)。 ; 汇编程序示例
从以上程序我们看到,一个程序可以分为代码段,数据段,堆栈段等几部分。汇编编译器在编译的时候会将这些文件转化为成一个标准格式(在windows下被称为PE文件格式)的文件(很多时候可执行文件被命名为二进制文件,我不喜欢这个名字,我觉得它容易给人误解;事实上计算机上所有的文件都是0和1组成的,都是二进制文件;真正不同的就是处理这些文件的方式;EXE文件需要操作系统来调用,TXT文件需要写字本来打开;但其本质上并没有什么不同,只是在不同的组合上,二进制数有不同的意义)。该文件格式会把我们的代码按格式安放在不同的部分。程序必须在内存中,才可以执行。在程序运行前,操作系统会按照标准格式将这些内容加载到内存中。这些数据加载到内存中也需要按照一定的格式,CPU提供了DS,CS,SS等段寄存器,这样代码段的开始位置需要被CS指定,数据段的开始位置需要用DS来指定,SS需要指向堆栈的开始位置等。在DOS下,每次只能运行一个程序,这些内容基本构成了进程。但在Windows下,丰富了进程的内容,还包括一些数据结构用来维护我们程序中用到的图标,对话框等内容,以及线程。其实进程就是程序在内存中的组织形式,有了这样的组织形式,程序才可能运行。也就是说,当程序加载到内存中去后,就形成了一个进程。
data_seg segment ;定义数据段
n_i dw ?
data_seg ends
stack_seg segment ;定义堆栈
dw 128 dup(0)
tos label word
statck_seg ends
code1 segment ;定义代码段
main proc far
assume cs:ccode,ds;data,seg,ss:stack_seg
start:
move ax,stack_seg ;将定义的堆栈段的地址保存到ss
mov ss,ax
mov sp,offset tos ;将堆栈的最后地址保存到sp,堆栈是从下到上访问的
push ds ;保存旧的数据段
sub ax,ax
push ax
mov ax,data_seg ;将定义的数据段保存到ds
mov ds,ax
call fact ;调用子函数
……. ;其它操作省略
ret ;返回到系统
main endp
fact proc near ;子函数定义
…… ;具体操作省略
ret ;返回到调用处
fact endp
code1 ends
end start
示例1:汇编程序结构
更多精彩
赞助商链接