2009-06-24 2 views
7

pthread처럼 부스트 스레드를 취소 할 수 있습니까?부스트 스레드 취소 중

작업자 스레드가 충돌하고 단순히 부스트 스레드 라이브러리에서 스레드를 취소하는 방법이없는 것처럼 보이는 경우 간단한 워치 독을 작성하고 있습니다.

답변

10

그들은 모든 종류의 미묘한 문제를 일으킬 수 있기 때문에 좋은 일인데, 취소를 지원하지 않습니다.

스레드 인터럽트와 boost :: thread_interrupted 예외를 다루는 문서 섹션을 살펴보고 원하는 작업을 수행하면서도 작업을 정리할 수있는 방법을 살펴보십시오.

+0

부스트 스레드 인터럽트는 스레드가 루프에서 멈추는 경우 도움이되지 않습니다. 이는 내가 보호하려고하는 것 중 하나입니다. 포터블 가능성을 포기하는 동안 나는 pthread cleanup 핸들러를 사용하는 것이 가장 좋다고 생각하기 시작했습니다. –

+3

또는 루프의 어딘가에 중단 지점을 놓습니다. 특히 스레드가 이미 오래 실행중인 경우에는 성능에별로 영향을주지 않아야합니다. 그리고 중단 인프라의 나머지 부분은 이미 마련되어 있습니다. – Duck

2

그들은, 내가 스레드를 알리기 위해 boost::condition을 사용하는 것이 좋습니다 것 (오리에 의해 지적) 그러나, 상자 밖으로 취소하여 작업자 스레드 (들) 내부에서 무슨 처리에 따라 지원하지 않습니다 그것은 가능한 한 빨리 끝내야한다.