终止一个线程(卡住)与另一个线程

时间:2014-09-29 06:46:01

标签: c++ multithreading

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

现在,根据细节,我尝试启动两个线程:

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

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

这是如何正确完成的?7

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

的线程

1 个答案:

答案 0 :(得分:1)

您无法强制终止其他线程。你只能礼貌地要求它退出。这适用于C ++和POSIX线程模型。 Windows有TerminateThread,但它很危险,实际上无法使用。 POSIX有pthread_cancel。那个合作终止符合您的账单,但没有标准的C ++等价物。

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

要让某个帖子免费使用join,请使用thread::detach()