线程伪句柄和线程真实的句柄是怎么个关系呢??

dadalan 2008-10-09 09:13:22
线程伪句柄和线程真实的句柄是怎么个关系呢??能否作详细的解释?
...全文
273 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下也会有一个类似于描述管道的结构体,有了这个结构体,估计要理解这个伪句柄以及句柄就更好了,这个结构体有人知道吗

15,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧