b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

windows多线程编程_python的优点_windows多线程编程实例(2)

电脑杂谈  发布时间:2017-05-28 11:01:50  来源:网络整理

利用SetHandleinformation方法可以随时修改内核对象句柄的一些属性,目前公开的句柄属性有两种,一种是该句柄是否能被继承,另一种是该句柄是否能被关闭。

1 .5.2同名共享

同名共享,不需要共享进程之间存在父子关系。但局限于内核对象是否支持这种共享方式。创建内核对象的Create函数中是否包含pszName是该内核对象是否支持同名共享的标志。

l 方法一:当Process1通过CreateObject(…”someName”)创建了一个名字为someName的内核对象后,Process2也调用了CreateObject(…”someName”),此时内核的动作是:在全局中查询发现已经存在someName1的对象;为Process2的句柄表添加一条Ojbect的记录,使用的句柄不确定;为someName这个Object的引用计数器加1。

l 方法二:Process2使用OpenObject(…”someName”)的方式来获得对名someName的Object的句柄。用这种Open方法的时候,需要提供一个参数让OS鉴权,以判定是否能够以参数指定的方式来访问内核对象。

1 .5.3复制内核对象的句柄的方式共享

跨进程边界的内核对象共享的另外一个方法是通过DuplicateHandle来复制内核对象句柄。

如果要将ProcessS中的对象拷贝到ProcessT中则调用DuplicateHandle的进程一定要有对这两个进程的访问权,即句柄表中拥有这两个进程内核对象的句柄记录。

2 线程的一般概念

为了了解线程的概念,我们必须先讨论一下进程的概念。

一个进程通常定义为程序的一个实例。在Win32中, 进程占据4GB的地址空间。与它们在MS-DOS和16位Windows操作系统中不同, Win32进程是没有活力的。这就是说,一个Win32进程并不执行什么指令,它只是占据着4GB的地址空间,此空间中有应用程序EXE文件的 代码和数据。EXE需要的任意DLL也将它们的代码和数据装入到进程的地址空间。除了地址空间,进程还占有某些资源,比如文件、动态内存分配和线程。当进程终止时,在它生命期中创建的各种资源将被清除。

但是进程是没有活力的,它只是一个静态的概念。为了让进程完成一些工作,进程必须至少占有一个线程,所以线程是描述进程内的执行,正是线程负责执行包含在进程的地址空间中的代码。实际上,单个进程可以包含几个线程, 它们可以同时执行进程的地址空间中的代码。为了做到这一点,每个线程有自己的一组CPU寄存器和堆栈。

每个进程至少有一个线程在执行其地址空间中的代码,如果没有线程执行进程地址空间中的代码,进程也就没有继续存在的理由,系统将自动清除进程及其地址空间。为了运行所有这些线程,操作系统为每个独立线程安排一些CPU 时间,操作系统以轮转方式向线程提供时间片,这就给人一种假象,好象这些线程都在同时运行。创建一个Win32进程时,它的第一个线程称为主线程,它由系统自动生成,然后可由这个主线程生成额外的线程,这些线程,又可生成更多的线程。

2 .1视图

l 进程只是线程的容器,从来不执行任何东西

l 线程总是在某个进程中被创建

l 线程在进程的地址空间中执行代码

l 线程们共享进程中的所有内核对象

3 线程的创建

HANDLE CreateThread(

PSECURITY_ATTRIBUTES psa,

DWORD cbStack,

PTHREAD_START_ROUTINE pfnStartAddr,

PVOID pvParam,

DWORD fdwCreate,


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-49702-2.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 张玉玺
      张玉玺

      伊拉克人民或许会投你的票

    热点图片
    拼命载入中...