내 질문은 다음 질문과 정확하게 공감했습니다.일정 시간 후에 기능을 해제하십시오. (C++)
break the function after certain time
그러나, 위의 문제는 파이썬 구현을 중심으로 돌아 가지. C++에서 같은 것을 구현하려고합니다.
#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;
}
}
}
문제 문
: 다음 코드는 평가에 시간이 오래 걸릴 수 회 반복 될 때마다, 함수 XYZ, 더불어, 대체 (호출 될 위의 코드에서 무한 루프). 내 목표는 2 분 이상 걸릴 경우 함수의 실행을 종료하고 다음 반복을 계속하는 것입니다.
그러나이 경우 오류 terminate called after throwing an instance of 'std::invalid_argument'
이 표시됩니다. 또한 맞춤 예외 클래스를 사용하려고했지만 오류가 지속됩니다.
이 구현과 관련하여 잘못된 점을 파악할 수 없습니까? 어떤 도움이라도 대단히 감사하겠습니다.
신호 처리기에서 Throwing이 잘못되었습니다. 시그널 핸들러에서 매우 진보 된 것을해서는 안되며, 궁극적으로는 플래그를 설정해야한다. –
당신이 찾고있는 것은 "코 루틴 (Coroutines)"입니다. C++에 포함되어 있는지는 확실하지 않지만 C#과 Unity3D에서는 그렇게 할 수 있습니다. – Brandon
@Brandon "Coroutines"는 기회가있는 것 같습니다. 그러나, 당신은이 문맥에서 그들을 논의하는 어떤 참고 문헌도 제공 할 수 있습니까? – Virange