WEB开发网
开发学院软件开发VC 理解 COM 套间 阅读

理解 COM 套间

 2006-07-22 22:58:03 来源:WEB开发网   
核心提示: 一、关于多线程(Multithreading)子曰:本立道生,也就是说我们明白事物所存在的原因,理解 COM 套间(2),自然也就明白事物是怎么回事了,如果我们清楚了套间(Apartment)的产生原因,也就是说,当程序加载到内存中去后,再去理解套间,就容易许多了

一、关于多线程(Multithreading)

子曰:本立道生。也就是说我们明白事物所存在的原因,自然也就明白事物是怎么回事了。如果我们清楚了套间(Apartment)的产生原因,再去理解套间,就容易许多了。我们先来看看,为什么需要套间?套间是为解决多线程中使用组件而产生的,首先我们来了解一下多线程。

1、理解进程(Processes)和线程(Threading)

理解线程,先从进程(Processes)开始,一般书上对进程的描述都比较抽象,都说进程是一个运行的程序的实例,进程拥有内存,资源。我这儿试着用一段汇编程序来解释一下进程,看看能不能帮你加深一下印象。我们先来看一段简单的汇编程序(你不理解汇编的话,建议找本书看看,一点不懂汇编,很难对其它高级语言有太深的理解)。 ; 汇编程序示例
  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:汇编程序结构
  从以上程序我们看到,一个程序可以分为代码段,数据段,堆栈段等几部分。汇编编译器在编译的时候会将这些文件转化为成一个标准格式(在windows下被称为PE文件格式)的文件(很多时候可执行文件被命名为二进制文件,我不喜欢这个名字,我觉得它容易给人误解;事实上计算机上所有的文件都是0和1组成的,都是二进制文件;真正不同的就是处理这些文件的方式;EXE文件需要操作系统来调用,TXT文件需要写字本来打开;但其本质上并没有什么不同,只是在不同的组合上,二进制数有不同的意义)。该文件格式会把我们的代码按格式安放在不同的部分。程序必须在内存中,才可以执行。在程序运行前,操作系统会按照标准格式将这些内容加载到内存中。这些数据加载到内存中也需要按照一定的格式,CPU提供了DS,CS,SS等段寄存器,这样代码段的开始位置需要被CS指定,数据段的开始位置需要用DS来指定,SS需要指向堆栈的开始位置等。在DOS下,每次只能运行一个程序,这些内容基本构成了进程。但在Windows下,丰富了进程的内容,还包括一些数据结构用来维护我们程序中用到的图标,对话框等内容,以及线程。其实进程就是程序在内存中的组织形式,有了这样的组织形式,程序才可能运行。也就是说,当程序加载到内存中去后,就形成了一个进程。

上一页  1 2 3 4 5 6 7  下一页

Tags:理解 COM 套间

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接