【问题标题】:have a running thread exit immediately when a particular event is signaled发出特定事件信号时立即退出正在运行的线程
【发布时间】:2013-03-09 06:42:59
【问题描述】:

考虑以下线程函数:

UINT MyClass::threadFunc(LPVOID lParam)
{
    // 1. Initialize stuff
    // 2. Validate stuff
    // 3. Do first task
    // 4. Do second task
    // 5. Un-initialize everything and return
}

这个线程是由我的应用程序中的一个对话框创建的。该线程将在对话框的生命周期内只运行一次(它是一个工作线程)。

在发生一些异步事件(可能是单击按钮,发出其他事件等)时,我想通知该线程立即返回,以便我的对话框可以正常退出(在等待该线程终止)。我不能只退出对话框,因为该线程仍在运行。

我对 C++ 比较陌生,这是我想到的(伪代码):

  1. 将线程函数包围在try-catch 中。
  2. 发生该异步事件时,引发线程终止异常。

这不起作用,所以我进行了一些研究,发现类似于this one 的答案。但出于某种原因,我觉得有一种更简单的方法可以实现这一点。在我开始实施上述想法之前,我只是想澄清一下。

谢谢!

【问题讨论】:

  • +1 好问题,我有时需要这样的功能来优雅地中止线程。

标签: c++ windows thread-synchronization


【解决方案1】:

一些搜索,我找到了这些:

【讨论】:

  • 我错误地投了反对票。我想知道是否有办法在不使用异常处理的情况下做到这一点。另外,您的第二个链接和我发布的链接是相同的。现在查看第一个链接。谢谢!
  • 我没有注意到你的第二个链接。但是第一个链接可能会对您有所帮助。
  • 您的第一个链接似乎很有用。一定会尝试的。但我的问题是这一切是否真的有必要。我只是希望该线程在某些事件中退出。异常处理是最好的方法吗?
  • 如果你想避免使用TerminateThread,你应该自己构建一个方便的方法。比如异常,或者只是线程之间的一个全局标志。
  • 感谢您的链接!真的很有帮助。
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 2018-01-24
相关资源
最近更新 更多