【问题标题】:Closing threads methods关闭线程方法
【发布时间】:2014-03-29 20:13:18
【问题描述】:

有什么区别

ExitThread(exitcode);

CloseHandle(threadHandle);

?

看起来他们做的是一样的事情,但他们肯定有区别。

【问题讨论】:

  • 是的。这有点明显。
  • CloseHandle 不会杀死句柄关闭的线程。相反,它“分离”了线程。此外,它不会造成资源泄漏;相反,它的目的是避免线程对象的资源泄漏。

标签: c multithreading winapi


【解决方案1】:

这些函数做的事情非常不同。 ExitThread 立即结束调用线程。 CloseHandle 只是破坏了一个句柄,从而删除了对线程对象的引用。它对关闭句柄的线程没有影响;线程将继续正常执行。通常,线程句柄在线程完成后关闭(例如,在使用WaitForSingleObject 等待其完成后)。但有时,为仍在运行的线程关闭句柄;它通常被称为分离线程。如果应用程序“忘记”线程并且不会等待其完成,则需要这样做;应该关闭此类线程的句柄,以让内核在线程完成时自动销毁相关资源。

另请参阅类似问题的答案:Windows C++ - closing thread with CloseHandle

【讨论】:

    猜你喜欢
    • 2015-03-22
    • 2013-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多