나는 두 개의 입력에서 차단하는 응용 프로그램을 작성 중입니다. istreams
.차단 된 부스트 :: 스레드
istream
중 하나를 읽는 것은 동기식 (차단) 호출이므로이 두 가지를 작성하여 읽기를 수행하기로했습니다.
이러한 스레드 중 하나는 수신 된 일부 입력에 따라 "종료"에 도달 할 수 있으며 "종료"에 도달하면 두 입력 스트림 모두 수신을 중지합니다. 불행히도, 나는 그렇게 할 것인지 알 수 없다.
따라서 하나의 스레드 만 (어느 블록을 미리 지정할 수는 없지만) 실제로 반환 (차단 해제) 할 수 있기 때문에 두 스레드에서 join()
을 사용할 수 없습니다.
나는 다른 것을 강제로 종료해야하지만 입력을 기다리는 동안 차단되므로 스스로 반환 할 시간을 결정할 수 없습니다 (조건 변수 또는 그렇지 않은 경우).
하는 중 수있는 방법들이 있습니다 :
- 가 부스트 : : 스레드, 또는
- 가
istream
이 "실패"에 힘을 신호를 보내기, 또는 - 는 부스트 : 스레드를 죽여?
참고 : istreams
의
- 하나는 내가 프로세스를 다시 시작하려고
cin
- , 그래서이 입력을 설정하라는 금지하는 방식으로 스트림을 닫을 수 없습니다.
편집 : 사망 할 필요가
- 은 "끝"에 도달하면 내가 알고, 내가 성공적으로 완료하는 스레드 알고합니다. 내가 알아야 할 살인 (또는 istream에서 읽기위한 다른 전략).
- 나는 종료하고 제대로 정리 :(양쪽 스레드를 필요
감사합니다! 내가 크로스 플랫폼을 할 수있는 방법이 있다고 생각하지 않지만, pthread_cancel 당신이 찾고있는 무엇을해야
운 좋게도 지금 리눅스 머신 용으로 개발하고 있지만 휴대용 버전을 선호합니다. 고마워! – mmocny
비슷한 상황에서 pthread_cancel()이 취소 기능을 사용하지 않고 취소 유형을 ASYNCHRONOUS로 설정하지 않았습니다. – gatopeich