面对一个打开的(核心)对象,区分其拥有者是进程或是线程,是件很重要的事情,因为这会决定系统何时做清除善后(Clean Up)操作。在这句话里“何时”的具体意义是什么?

解决方案 »

  1.   

    这一般是指对象是在线程栈里生成的,还是在全局堆里生成的
    前者在线程结束时就消失
    而后者需要进程结束才消失例如,你在线程函数里声明一个参数
    std::string m_localstr;
    它是线程栈对象
    而同样,如果是声明为全局,则它是进程对象,分配在进程栈
      

  2.   

    Usage Counting
    Kernel objects are owned by the kernel, not by a process. <<windows 应用程序设计 第四版>>
    核心对象比不是为线程(线程是我加进去的,原文没这样说)或者进程所有的.接下来说到:
    如果一个进程创建了核心对象, 然后你中止了进程, 核心对象不一定会被Destory.
    因为有两种情况:
    1 这个进程或线程被中止了就没有其他线程或者进程使用这个KERNEL OBJECT了(也就是引用数变为0了)----> 摧毁
    2 如果仍然有线程或进程在使用 -----> 仍然保留, 将其引用数减少1.kernel会自动为他的usage count 计数. 直到没有东西(姑且这样说)使用它为止.够详细了吧... 如果还不清楚的话...  还是看英文原版的书吧. 感觉翻译了的书总是怪怪的.