2013-10-12 7 views
-1

안녕하세요 현재 사용자가 유휴 상태로 일정 시간 후에 사용자가 자동으로 로그 아웃하는 C++ 타이머를 구현하려고합니다. 내가 무엇을하고 싶은지는 사용자가 NotIdleException이 main에서 호출 된 명령을 입력하고 15 분 동안 sleep 함수를 실행하는 스레드가 타이머 시작 부분부터 다시 시작될 때입니다.C++ 크로스 스레드 예외 Throwing

타이머 코드는 여기에 있습니다. http://pastebin.com/tw1YGcmu

문제는 내가 주 스레드에서이 예외를 호출하고 타이머 스레드에서 try catch에 의해 처리되도록하고 싶습니다. C++ (크로스 플랫폼!)에서이 작업을 수행 할 수있는 방법이 있습니까?

+0

'boost :: asio'에는 이미 [타이머]가 있습니다 (http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/overview/timers.html); 'boost :: thread'는 잠자는 동안 중단 될 수 있습니다 (['thread :: interrupt'] (http://www.boost.org/doc/libs/1_54_0/doc/html/thread/thread_management.html#thread. thread_management.thread.interrupt)), 인터럽트 된 스레드에서 예외를 발생시킵니다. – dyp

+0

크기를 적당하게 유지하면서 질문에 관련 코드를 포함 시키십시오. 질의 응답이 링크없이 * 설 수있는 한 질문이나 답변의 링크는 괜찮습니다. – dandan78

+0

예외를 사용하여 스레드간에 (예외가 아닌) 메시지를 전달 하시겠습니까? 제발 이걸 구현하는 데 최악의 방법은 아닐까요? – user2802841

답변

1

코드에서 잠깐 살펴 보았지만 호출/사용 방법에 대한 예는 없습니다.

스레드간에 예외를 전송할 방법을 찾고 있다면 std :: future (C++ 11에서)는 get() 멤버 함수가 호출 될 때 예외를 전파 할 것이며, 스레드가 미래를 채우는 경우 예외를 생성합니다. std::future::get

또한 스레드 (또는 C++ 11 기능)에 알릴 수있는 std :: condition_variable을 볼 수도 있습니다.

코드가 어떻게 사용되는지에 대한 명확한 진술이 없기 때문에 말하기는 어렵지만, std :: condition_variable은 사용자가하려는 일에 더 나은 디자인이 될 것이라고 생각합니다.

관련 문제