2017-02-06 11 views
0

안녕하십니까, C++ 11에서 멀티 스레딩을 사용하고 있습니다. 모든 실행중인 스레드와 종료 된 스레드를 추적하는 메커니즘을 만들고 싶습니다. 스레드가 종료되면 자동으로 종료 된 스레드가 생성됩니다. 누구든지 C++ 11에서 이것을 구현하는 방법에 관한 아이디어가 있습니까? 대단히 감사드립니다.C++에서 스레드 종료를 추적하는 방법 11

+1

나는 종료 된 스레드에 * 참여할 것이라고 가정합니다. 간단한 해결책은 스레드가 종료하기 전에 마지막으로 설정 한 원자 부울 플래그입니다. 주 스레드는이 플래그를 폴링하고 설정된 경우 스레드에 가입합니다. –

+0

@Someprogrammerdude 주석에 추가하려면 일부 * 스레드 라이브러리 * (예 : * pthreads *)가 * join *하기 전에 * 폴링 * 스레드 상태 * 문제를 제거하는 * 비 차단 join *을 제공합니다. 효율성은 떨어지지 만 더 깨끗한 디자인이되어야합니다. –

+0

@Someprogrammerdude를 재생 해 주셔서 감사합니다. 나는 전에 원자 기기를 사용한 적이 없다. 내 프로그램에서이 부울 플래그를 어디에 추가해야합니까? –

답변

0

일반적인 패턴은 다음과 같이 루프에서 포장 블록을 시도하는 것입니다 예외를 살아 코드를 작성하기 :

for(;;) { 
    try { 
     // Your code here 
    } catch (const std::exception& e) { 
     // Log exception 
    } catch (...) { 
     // Log unknown exception 
    } 
} 

서버에 일반적입니다 : 사용자 요청을 서비스하는 것은 실패 할 경우, 다음 로그 현재 연결을 끊고 다음 연결을 시도하십시오. 물론 어떤 일이 실제로 일어 났고 모든 재 시도가 실패 할 가능성이 있습니다. 따라서 반복해서 시도하는 무한 루프로 PC에 과부하가 걸리지 않도록주의해야합니다.

스레드 내부에이 루프를 넣을 수 있으므로 문제가 발생해도 충돌이 발생하지 않으며 스레드를 직접 사용하는 대신 std::future을 사용하고 future.get() 코드를이 루프 내에 넣을 수 있습니다.