이 질문은 OpenKinect 라이브러리에만 국한되지 않지만이 문제를 보여주기 위해 생각해 볼 수있는 가장 좋은 예입니다.Pthreads를 사용하여 예외 잡기
OpenKinect 용 C++ Wrapper에서 무언가가 잘못 될 때마다 runtime_error 예외가 발생합니다. 이 예제는 libfreenect.hpp에 있습니다. 스레드는 클래스의 생성자에서 만들어집니다.
// Do not call directly, thread runs here
void operator()() {
while(!m_stop) {
if(freenect_process_events(m_ctx) < 0) throw std::runtime_error("Cannot process freenect events");
}
}
static void *pthread_callback(void *user_data) {
Freenect* freenect = static_cast<Freenect*>(user_data);
(*freenect)();
return NULL;
}
제 질문은 간단히 : 이러한 오류를 어떻게 든 잡아서 처리 할 수 있습니까?
일반적으로 예외를 처리하거나 코드를 다시 작성합니다. 예외로 인해 프로그램이 중단되는 것을 좋아하지 않으며 오류가 발생할 수 있음을 알고있는 경우이를 깨끗하게 처리하고 싶습니다. 필자가 다시 작성할 수없는 비슷한 일을하는 라이브러리가 있기 때문에이 질문을하는 이유는 무엇입니까?
예외를 처리 할 수없는 이유는 무엇입니까? 왜 시도/캐치 라운드 '(* freenect)();' 요구? –
요점은 이것이 라이브러리의 일부라는 것입니다. 이 소스는 오픈 소스이지만 변경 될 수는 있지만 변경할 수없는 다른 상황이 있습니다. 그래서 나는 단지 pthread를 사용하여 다른 쓰레드를 던질 수 있는지를 알고 싶었다. – AdmiralJonB
직접 아니요, 아니요. 예외는 스택 기반 메커니즘이므로 스레드마다 다릅니다. 너가 pthreads 안에 그 (것)들을 붙 잡지 않으면, 실은 소리없이 종료 될 것이다. 다른 쓰레드에 예외를 전달하려면 catch {}에 스레드 간 통신이 필요합니다. –