仅使用标准C ++(没有特定于平台的API),我想启动一个可能立即完成或超时的外部应用程序。如果应用程序暂停,我的应用程序会超时,之后它会终止应用程序并重新启动它。
现在,根据细节,我尝试启动两个线程:
问题是,如何从第二个线程终止第一个线程?我启动应用程序的方式是使用system()函数。它是同步的,所以如果我希望终止,我没有办法从该线程中检查。必须以某种方式强制通过外部的异常。
这是如何正确完成的?7
P.S。:如果这是不可能的,我怀疑它不是,那么我只是不想再等待那个线程了。它可以简单地在后台停滞不前。我如何实现这一目标? (目前,我正在等待join()
)
答案 0 :(得分:1)
您无法强制终止其他线程。你只能礼貌地要求它退出。这适用于C ++和POSIX线程模型。 Windows有TerminateThread,但它很危险,实际上无法使用。 POSIX有pthread_cancel。那个合作终止符合您的账单,但没有标准的C ++等价物。
即使您以某种方式终止某个帖子,它也不会对通过system
启动的任何程序执行任何操作。
要让某个帖子免费使用join
,请使用thread::detach()
。