限制c中函数的执行时间

时间:2015-07-30 10:08:10

标签: c timeout longjmp setjmp

我想限制纯C中函数的执行,而不是停止整个程序。

我相信stackoverflow.com上最接近这一点的是这个主题的最后评论:How to limit the execution time of a function in C/POSIX?

有人谈到在函数之后使用setjmp和longjm来限制时间,但线程已经死了。

有没有人知道这确实可能吗?

干杯

2 个答案:

答案 0 :(得分:1)

我可以看到两个选项,第一个检查每几行代码的时间,return是否太多,但我认为这不是一个好主意。

其次,你可以使用线程。同时运行两个函数,一个计时另一个,如果时间太大则会杀死第一个。现在我很确定Windows和Linux有不同的库来创建线程,所以你可以尝试使用一个适用于所有平台的库,例如http://openmp.org/wp/

我不太熟悉那个库和一般的线程,但我希望它有所帮助

答案 1 :(得分:0)

虽然发布我的解决方案可能是有用的。它是此帖子http://cboard.cprogramming.com/c-programming/148363-limit-execution-time-function.html和此处的IPC TPL示例的组合:https://github.com/troydhanson/tpl/blob/master/doc/examples.txt

==> default: Waiting for machine to boot. This may take a few minutes...
default: SSH address: 127.0.0.1:10201
default: SSH username: vagrant
default: SSH auth method: private key
default: Warning: Connection timeout. Retrying...
default: Warning: Authentication failure. Retrying...

基本上,我们分叉程序,孩子执行任务,父母等待孩子完成。孩子包含一个警报,如果为真,则表示父母以该方式存在。如果它完成(如本例所示),则子对象函数将父对象函数作为TPL缓冲区发送给父对象。