C++ 在一定时间后中断该功能。(C+;+;)
我的问题与下面的问题完全一致 然而,上面的问题是围绕Python实现的。我试图在C++中实现同样的事情。代码如下:C++ 在一定时间后中断该功能。(C+;+;),c++,exception,exception-handling,subprocess,signals,C++,Exception,Exception Handling,Subprocess,Signals,我的问题与下面的问题完全一致 然而,上面的问题是围绕Python实现的。我试图在C++中实现同样的事情。代码如下: #include <signal.h> #include <stdio.h> #include <stdbool.h> #include <unistd.h> #include <stdexcept> void handle_alarm( int sig ) { printf("%d",sig); t
#include <signal.h>
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <stdexcept>
void handle_alarm( int sig ) {
printf("%d",sig);
throw std::invalid_argument("none");
}
int main() {
for (int i=0; i<10; i++){
signal( SIGALRM, handle_alarm );
printf("Doing normal work %d \n",i);
alarm(120);
try {
for (;;){} // It will be replaced by a function which can take very long time to evaluate.
}
catch(std::invalid_argument& e ) {
continue;
}
}
}
#包括
#包括
#包括
#包括
#包括
无效句柄_报警(int sig){
printf(“%d”,sig);
抛出std::无效的_参数(“无”);
}
int main(){
对于(inti=0;i解决问题的一种方法是使用async
然后,您可以使用返回的只等待特定时间的结果
如果你没有在时间范围内得到结果,那么就保存未来(在它有结果之前是不可能的!),但是忽略它和它可能的结果
这不会真正“中断”函数,它仍将继续,直到完成。但这是一种继续程序的方法
另一种可能的解决方案是使用并在其中持续检查超时,或某些()标志,以了解它是否应该继续。插入信号处理程序是不好的。您不应该在信号处理程序中执行非常高级的操作,最终它应该只设置一个标志(最好是原子标志)然后你检查一下。你要找的是“协同程序”……不确定C++是否有,但是在C和Uny3D中,你可以做到。@布兰登“协同程序”似乎有机会。但是,您能否提供任何参考,在本文中讨论它们。wait_for似乎是一个不错的选择,但它不适合我的任务。我有1000次迭代,如果每次都不终止,将导致很高的延迟。