【问题标题】:Is it reasonable to call CloseHandle() on a thread before it terminates?在线程终止之前调用 CloseHandle() 是否合理?
【发布时间】:2010-09-29 22:39:52
【问题描述】:

我只想创建一个线程,然后立即调用 CloseHandle 并让线程自行终止,这样我就不必在“原始”线程中进行额外的清理工作(不是清理本身很难,但这意味着我想避免大量额外的簿记)。

MSDN 说在线程上调用 CloseHandle() 不会终止线程,但我不清楚这是否意味着我真的可以这样做。

【问题讨论】:

    标签: multithreading winapi


    【解决方案1】:

    不仅合理,不这样做就是句柄泄漏。通常我会在创建线程后立即关闭它,除非我在其他地方需要它。

    【讨论】:

    • +1,这样您在使用 AppVerifier 时就不会出现误报。
    • 这是否意味着ExitThread()(显式或隐式调用)关闭了退出线程中的线程句柄,这样只有创建线程的线程仍然需要关闭句柄(即CreateThread()create句柄数为 2)?
    【解决方案2】:

    CreateThread 函数使引用计数+2,CloseHandle 只使引用计数-1,当线程函数完成时,系统将引用计数-1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-15
      • 2011-12-24
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      相关资源
      最近更新 更多