【发布时间】:2020-05-22 17:12:49
【问题描述】:
假设我有一个 foo() 函数。例如,我希望它运行 5 秒,然后必须取消它并继续执行程序的其余部分。
代码sn-ps:
int main() {
// Blah blah
foo(); // Running in 5 sec only
// After 5 sec, came here and finished
}
参考:在 StackOverflow 上搜索了一段时间后,我发现这是我需要但用 python 编写的:Timeout on a function call。
signal.h 和 unistd.h 可以关联。
【问题讨论】:
-
是函数负责决定它花费了太长时间,还是另一个外部线程决定并需要告诉函数停止?
-
您是否需要在此期间保留
foo()产生的任何副作用,或者您是否可以丢弃任何部分结果并声明花费了太长时间? -
我想我想在需要终止
foo()时处理另一个函数。 @1201ProgramAlarm -
@idclev463035818:有时单元测试代码具有此属性。有时某些数值计算必须在一段时间后中断。但是对于前者,您将部分运行视为失败,因此您不关心部分结果。对于后者,例程本身会监控它是否应该以部分计算结束(例如,结果没有收敛)。
-
@jxh 用于单元测试我不会关心
foo的不干净终止。另一方面,对于数值计算,我永远不想简单地终止它,而是包括一种提前终止的方法 insidefoo这样我就可以轻松地收集有关计算状态的信息时间到。不管是什么,恕我直言,一个好的解决方案取决于foo实际上是什么以及它为什么需要超时
标签: c++ multithreading timeout