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

windows多线程编程_c语言 windows 多线程_linux多线程编程实例(2)

电脑杂谈  发布时间:2017-05-28 10:16:20  来源:网络整理

利用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 线程的一般概念2 .1视图

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

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

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

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

3 线程的创建

HANDLE CreateThread(

PSECURITY_ATTRIBUTES psa,

DWORD cbStack,

PTHREAD_START_ROUTINE pfnStartAddr,

PVOID pvParam,

DWORD fdwCreate,

PDWORD pdwThreadID);

《Windows核心编程》P124介绍说应当使用编译器提供的线程创建函数,而不应当直接使用CreateThread。

3 .1CreateThread调用的内核行为

调用CreateThread后,OS进行如下几个动作:

l 生成一个线程内核对象

l 在进程空间内为线程分配堆栈空间

因为线程的环境同于其所在进程的环境,所以创建的线程可以访问进程中的所有资源,包括线程中所有的内核对象。

4 线程销亡4 .1终止线程的方式:

l 线程函数返回(最好使用这个方式,可以保证:线程种创建的C++对象正常析构;OS释放线程堆栈内存;OS将线程的退出码设置为线程函数的返回值;系统将递减该线程内核对象的的使用计数器【如果此时还有其他引用……,见下面说明】。)

l 调用ExitThread(不能释放C++对象,所以最好不要使用这个方式。windows多线程编程另外,如果非要调用也应当调用编译器推荐的,如_endThread【Windows核心编程P127】)

l 同进程内的其他线程(包括主线程)调用TerminateThread(被撤销线程得不到通知,不能释放资源,尽量避免这种方式。另外这个函数是个异步函数,返回时,线程不保证已经被撤销,如果要观察线程是否被撤销,应当使用WaitForSingleObject)


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

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

    • 王弘元
      王弘元

      火腿鹅肝鱼子酱螃蟹

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