【问题标题】:Calling TerminateThread for a thread in suspended state c++为处于挂起状态的线程调用 TerminateThread c++
【发布时间】:2014-03-05 04:19:15
【问题描述】:

调用TerminateThread时,即使处于挂起状态,线程也会终止吗?

【问题讨论】:

    标签: c++ multithreading mfc


    【解决方案1】:

    TerminateThread function 会破坏线程,无论其状态或可能的副作用如何。链接的 MSDN 页面对此进行了详细介绍。

    TerminateThread 用于使线程退出。发生这种情况时,目标线程没有机会执行任何用户模式代码。附加到线程的 DLL 不会收到线程正在终止的通知。系统释放线程的初始栈。

    Windows Server 2003 和 Windows XP:目标线程的初始堆栈未释放,导致资源泄漏。

    TerminateThread 是一个危险的函数,只能在最极端的情况下使用。只有当您确切地知道目标线程在做什么并且您控制了目标线程在终止时可能正在运行的所有代码时,您才应该调用 TerminateThread。例如,TerminateThread 可能会导致以下问题:

    我不得不问你为什么要调用它,因为它绝对是关闭线程的最后手段。除非您非常幸运或小心,否则您的应用程序将泄漏内存和其他资源。

    【讨论】:

    • @Ade Miller 感谢您提供的信息。我现在通过使用析构函数中的 WaitForSingleObject 在关闭期间同步线程来修改代码。
    • 您应该考虑在析构函数中等待的后果。 stackoverflow.com/questions/6710129/…。更好的策略是有一个明确的关闭方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多