1.一般的内核对象的句柄包含在进程的句柄表中,当用CreateProcess创建子进程,这些内核对象句柄有可能被子进程继承,这很好理解,但标题中说的那两种内核对象的句柄也包含在句柄表中吗,它们若被继承有什么意义?也就是两个进程拥有同一个进程核心对象,或拥有同一个线程内核对象,这不乱套了吗?
2.《windows核心编程》上说几个线程可以共用一个线程内核对象,这很不好理解,不同的线程上下文都不同,怎么能共享一个线程内核对象呢?
3.《windows核心编程》上说,用c/c++写windows多线程程序时,一定不要windows函数CreateThread函数而要用c运行库函数_beginthreadex,然后还解释了一大通,很不理解到底区别在哪儿,只知道_beginthreadex调用了CreateThread,本质区别到底在哪儿?《windows程序设计》上说到这两个函数时好象只是个人喜好的问题,随便你用哪个,这到底是怎么回事?
4.用双击windows资源管理器中的程序图标来启动程序的方式是不是实际上背后shell调用了CreateProcess,把被启动的程序作为shell的子进程?

解决方案 »

  1.   

    1. 如果你的进程打开了一个进程或线程对象(OpenProcess/OpenThread/CreateThread/CreateProcess),句柄表中就有。被继承的意义就是子进程不用再通过OpenProcess打开它了,即便调用OpenProcess,返回的也是同一个句柄。
    2. 几个线程共享一个线程内核对象??这个我忘了,书上有这么说吗?
    3. 区别在于_beginthreadex会在建立线程的同时建立线程本地存储器,而CreateThead并不这样做(windows实现中,CreateThread创建的线程开始没有TLS,但一旦用到就会建立TLS。但是ExitThread并不能释放TLS,会造成内存泄露,所以不建议CreateThread)
    4. 应该是的。