【问题标题】:Thread Exit Events - C++线程退出事件 - C++
【发布时间】:2011-01-13 14:16:16
【问题描述】:

当使用事件(使用::CreateEvent(...) 创建)来通知线程退出时,是否有必要在退出线程或关闭事件句柄(::CloseHandle(...))之前重置该事件(::ResetEvent(...))?或者,如果有可能重新启动线程,这是一种好习惯吗?这是针对 Windows 环境的。谢谢。

【问题讨论】:

  • 请更具体。 IE。一些代码会有所帮助。鉴于您提供的信息,我知道的唯一好的做法是,您应该确保在不再需要事件后立即在事件句柄上调用 ::CloseHandle,并确保之后不要尝试使用该事件

标签: c++ windows multithreading events


【解决方案1】:

没有必要调用重置事件,因为当您关闭句柄时,与之关联的事件将不再有效。

【讨论】:

    【解决方案2】:

    这取决于您使用的事件的语义。

    如果您使用事件触发多个线程死亡,那么您不应该在每个线程中重置事件。如果您使用它仅触发一个线程死亡,那么它再次取决于进一步的语义。如果该事件用于向其他线程发出其他信号,那么您需要在死线程中重置该事件。否则,如果事件仅用于指示单个线程死亡,而没有其他用途,那么您可以重置事件或不重置事件。发出信号的事件不会唤醒其他任何东西。

    您不必为了防止资源泄漏而重置事件。你所要做的就是CloseHandle()

    【讨论】:

      【解决方案3】:

      在关闭其句柄之前无需翻转事件的设置状态。 进一步说明,事件的设定状态与其存在无关。您可能知道,CreateEvent(...) 函数允许您设置事件的初始状态。所以如果你把它初始化为set,你是​​否应该确定它在CloseHandle()之前设置?不,当然不是,设置状态完全无关紧要。这类似于在销毁类之前将其成员重置为其起始状态。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        相关资源
        最近更新 更多