2016-10-16 3 views
0

프로젝트에서 우리는 래퍼 클래스에 여러 statemachines를 생성합니다. 각 래퍼는 자체 스레드에서 실행됩니다. 작업이 완료되면 래퍼 클래스 소멸자가 호출되고 스레드에서 스레드를 중지하려고합니다.소멸자에서 현재 스레드 종료

thread.join()을 사용하는 경우 교착 상태가 발생하지만 자체에 가입하려고하므로 교착 상태가 발생합니다. 우리는 어떻게 든 다른 스레드에 신호를 보낼 수 있습니다.하지만 약간 지저분 해 보입니다.

개체 삭제시 클래스가 실행중인 스레드를 올바르게 종결하는 방법이 있습니까?

+0

대개 _has a_ 관계가있는 클래스에서 스레드를 사용하고 있습니다. 이 클래스는 스레딩 함수 내부에서 수행해야하는 작업을 조정하는 API를 구성합니다. FSM을 사용한다면 내 [STTCL] (https://github.com/makulik/sttcl) 프레임 워크에 관심이있을 수 있습니다. –

+0

물론 래퍼의 "작업이 완료되면"해당 스레드 함수가 반환됩니까? –

답변

0

thread.join() 스레드를 중지하지 않습니다. 스레드가 완료 될 때까지 기다린 다음 반환합니다. 스레드를 중지하려면 스레드를 중지 할 수있는 방법이 있어야하며 스레드가 중지 할 시간인지 여부를 확인해야합니다. 이를 수행하는 한 가지 방법은 원자 bool을 사용하는 것입니다.

내 머리 꼭대기에서 벗어납니다. 컴파일되지 않았고 테스트되지 않았습니다.