zoukankan      html  css  js  c++  java
  • 伪句柄

    DWORD WINAPI ParentThread(PVOID pvParam)
    {
       HANDLE hThreadParent = GetCurrentThread();
       CreateThread(NULL, 0 , ChildThread, (PVOID)hThreadParent, 0, NULL);
       //Function continues...
    }
    
    DWORD WINAPI ChildThread(PVOID pvParam) 
    {
       HANDLE hThreadParent = (HANDLE) pvParam;
       FILETIME ftCreationTime, ftExitTime, ftKernelTime, ftUserTime;
       GetThreadTimes(hThreadParent, &ftCreationTime, 
          &ftExitTime, &ftKernelTime, &ftUserTime);
       // Function continues...
    }
    
    这个代码的目的是让父线程给子线程传递一个线程句柄,以标识父线程。但是,父线程传递了一个伪句柄,而不是一个实句柄。当子线程开始运行时,它将一个伪句柄传递给G e t T h r e a d Ti m e函数,使子线程得到它自己的C P U时间,而不是父线程的C P U时间

    答:伪句柄和句柄都能代表一个核心对象,并且通过他们都能进行对核心对象的操作,比如CloseHandle等。
    但是伪句柄只是一个壳,他在线程间传递的时候,句柄所引用的东西是目标对象的,不是自身的。也就是说,在不同的线程中,他映射的对象不一样。而且伪句柄在传递过程中不会引起引用计数的增减。
    可以用DuplicateHandle将伪句柄转换成实句柄,同时源句柄引用计数加1。

    具体参看核心编程第6章

    另可参考:http://blog.csdn.net/ouyang2008/article/details/1009760

  • 相关阅读:
    cnpm与npm指定有什么区别?
    Node.js与VUE安装及环境配置之Windows篇
    kafka和rabbitmq对比
    .NET笔记题库(一)
    API网关的用处
    C#问答题与附解收集(三)
    Error Code: 1175
    有时间测试dism
    sublime 3103liense
    weblogic 安装和部署项目(原创)
  • 原文地址:https://www.cnblogs.com/hgy413/p/3693630.html
Copyright © 2011-2022 走看看