gpt4 book ai didi

c++ - 从另一个线程终止一个线程(被卡住)

转载 作者:行者123 更新时间:2023-11-28 06:40:15 41 4
gpt4 key购买 nike

仅使用标准 C++(无平台特定 API),我想启动一个可能会立即完成或超时的外部应用程序。如果应用程序暂停,我的应用程序有一个超时,之后它会简单地终止应用程序并重新启动它。

现在,归根结底,我尝试启动两个线程:

  • 第一个线程启动应用程序并等待它终止
  • 第二个线程等待几秒钟并检查第一个线程是否终止。如果没有,则认为它已停滞。

问题是,如何从第二个线程终止第一个线程?我启动应用程序的方式是使用 system() 函数。它是同步的,所以如果我希望终止,我无法通过该线程进行检查。它必须以某种方式从外部通过异常强制执行。

这是如何正确完成的?7

P.S.:如果这不可能,而且我怀疑它不可能,那么我根本不想再等待那个线程了。它可以简单地在后台停滞不前。我该如何实现? (目前,我正在等待带有 join() 的线程)

最佳答案

您不能强行终止另一个线程。你只能礼貌地要求它退出。这适用于 C++ 和 POSIX 线程模型。 Windows 有 TerminateThread,但它非常危险,几乎无法使用。 POSIX 有 pthread_cancel。这是符合您要求的合作终止,但没有标准的 C++ 等价物。

即使您以某种方式终止线程,它也不会对其可能通过 system 启动的任何程序执行任何操作。

要释放线程而不需要join,请使用thread::detach()

关于c++ - 从另一个线程终止一个线程(被卡住),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26093931/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com