社区
进程/线程/DLL
帖子详情
线程伪句柄和线程真实的句柄是怎么个关系呢??
dadalan
2008-10-09 09:13:22
线程伪句柄和线程真实的句柄是怎么个关系呢??能否作详细的解释?
...全文
271
9
打赏
收藏
线程伪句柄和线程真实的句柄是怎么个关系呢??
线程伪句柄和线程真实的句柄是怎么个关系呢??能否作详细的解释?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ziseliuxingzh
2009-02-09
打赏
举报
回复
精彩!!
jameshooo
2008-10-09
打赏
举报
回复
你还想要结构?使用句柄概念就是为了隐藏结构,要是大家都知道了结构,恐怕这个世界会乱套。
cnzdgs
2008-10-09
打赏
举报
回复
伪句柄是一个固定的值。进程的伪句柄是-1,只能在本进程中使用;线程的伪句柄是-2,只能在本线程中使用。
liyinlei
2008-10-09
打赏
举报
回复
线程伪句柄是一个特别的数,只是代表当前的线程句柄(假如将某个线程的伪句柄拿到另一个线程去使用,那么这个伪句柄实际操作另一个线程),并且不会影响线程对象的引用计数。使用后也不需要对其进行CloseHandle。
线程的真实句柄:每个进程有一张内核对象表,这个表里放置进程内打开的所有内核对象,并给每个对象分配一个序号,线程句柄实际上就是 内核对象表中对应线程对象的序号。因此句柄与进程相关。在这个进程中的句柄在不能随意拿到另一个进程中使用,可以通过API进行句柄拷贝。打开一个句柄,会使线程对象的引用技术加一,CloseHandle会使线程对象引用计数减一,所以使用完句柄后需要进行关闭。
dadalan
2008-10-09
打赏
举报
回复
能否给出一个关于句柄和伪句柄的结构体定义呢?
bingway
2008-10-09
打赏
举报
回复
伪句柄和句柄都能代表一个核心对象,并且通过他们都能进行对核心对象的操作,比如CloseHandle等。
但是伪句柄只是一个壳,他在线程间传递的时候,句柄所引用的东西是目标对象的,不是自身的。也就是说,在不同的线程中,他映射的对象不一样。而且伪句柄在传递过程中不会引起引用计数的增减。
可以用DuplicateHandle将伪句柄转换成实句柄,同时源句柄引用计数加1。
WinEggDrop
2008-10-09
打赏
举报
回复
[Quote=引用楼主 dadalan 的帖子:]
线程伪句柄和线程真实的句柄是怎么个关系呢??能否作详细的解释?
[/Quote]
我的理解是伪句柄和真实句柄是用户层接口和内核接口关系.伪句柄是一个给用户层程序去处理线程句柄的一个对象,但真实句柄是给系统去处理线程句柄一个对象.他们之间是联系的,不同的只是用户层调用伪句柄,然后这个处理再交给系统,系统再在内核中处理真实句柄.
这些对象都在内核的结构或变量中,系统会有一张图表保存着当着这些内核结构,但会随时变化的,例如线程增加,注销等都会令这张"图表"变化.
Hiiishe
2008-10-09
打赏
举报
回复
暂时理解为,当前线程的句柄,这个伪句柄无论放在哪个线程操作就是哪个线程起了作用,Jeffry R是这么说的
dadalan
2008-10-09
打赏
举报
回复
我想在linux下也会有一个类似于描述管道的结构体,有了这个结构体,估计要理解这个伪句柄以及句柄就更好了,这个结构体有人知道吗
线程
&进程(获取
伪
句柄
& 转为
真实
句柄
)
一. 1. HANDLE GetCurrentThread(); //获得当前
线程
伪
句柄
HANDLE GetCurrentProcess(); //获取当前进程
伪
句柄
2. 3.
伪
句柄
不是真正的
句柄
,因此不需要CloseHandle来关闭 3.
伪
句柄
不会增加
线程
内核对
线程
、
线程
句柄
、
线程
ID
在windows系统中,
线程
的id是唯一对应的,也就是说,如果两个
线程
返回相同的id,则他们必然是同一
线程
,反之一定是不同的
线程
。而
线程
的
句柄
并不是
线程
的唯一标识,
线程
的
句柄
只是用来访问该
线程
的的一个32位值,尽管相同的
句柄
一定标识同一
线程
,但同一
线程
可能拥有两个打开的
句柄
,因此,不能用
句柄
来区分两个
线程
是否是同一
线程
。在 Windows 中,大多数对象是由包含创建这些对象的
线程
的进程拥有的。当一个
线程
终止运行时,在与它相关联的
线程
内核对象的所有未结束的引用关闭之前,该内核对象不会自动被释放。
进
线程
, 进
线程
句柄
, 进
线程
ID,
句柄
与ID间转换,
伪
句柄
,
伪
句柄
转为
句柄
线程
与
线程
句柄
(refer to: http://blog.csdn.net/titan_koa/article/details/2439027) 1.
线程
和
线程
句柄
(Handle)不是一个东西,
线程
是在cpu上运行的.....(说不清楚了),
线程
句柄
是一个内核对象。我们可以通过
句柄
来操作
线程
,但是
线程
的生命周期和
线程
句柄
的生命周期不一样的。
线程
的生命周期就是
线程
函数从开始执行到r
线程
(进程)的
句柄
与
伪
句柄
通过调用GetCurrentProcess或者GetCurrentIThread可以获取
线程
或者进行的
伪
句柄
,所谓
伪
句柄
,即指向当前
线程
或者进程的
句柄
,并不是真正意义上的
句柄
。它并不穿件
句柄
,同时也不增加引用计数,因次调用CloseHandle不作任何处理。 有时候,我们需要在不同的
线程
或者进程之间切换,这时候就会出问题,因为我们通过上面的方法得到的是个
伪
句柄
,必须通过调用D
关于进程和
线程
以及
句柄
关于进程和
线程
以及
句柄
进程/线程/DLL
15,466
社区成员
49,169
社区内容
发帖
与我相关
我的任务
进程/线程/DLL
VC/MFC 进程/线程/DLL
复制链接
扫一扫
分享
社区描述
VC/MFC 进程/线程/DLL
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章