차단 방법이 있다고 가정 해 봅시다. Block()을 호출합니다.스레드 동기화
내가 메인 스레드를 차단하고 싶지 않아 대신 작업자 스레드를 생성 할 수 있습니다. 대신 블록을 호출합니다.
그러나 다른 조건이 있습니다.
5 초 이내에 블록 호출을 반환하고 싶습니다. 그렇지 않으면, 주 스레드가 차단 호출을 알리고 작업자 스레드를 종료하도록하고 싶습니다.
그 시나리오에서 가장 좋은 해결책은 무엇입니까?
내가 그런 식으로 뭔가를 생각 : 5 초, 및 추가 전과 블록에 대한 호출 후 GetTickCount를 호출하고 델타를 계산하기에 타이머 객체를 생성하기 위해 작업자 스레드에서하는 workher 스레드를 만들 수 있습니다.또한 Block 함수가 이미 반환되었는지 여부를 나타내는 IsReturned 부울을 정의합니다. 블록 호출 후 을 true로 설정하십시오.
는 타이머 기능의 해당 부울에 따라 내가 진행하는 방법을 결정 : 부울이 참
경우 내가 아무것도하지 않습니다.
부울 내가이 APC OnFailure 대기 또는
(건 내가 그렇게 할 수 있는지 확실하지 않습니다이다) 어쩌면 주 스레드에서 성공 이벤트를 신호 및 forcfully 작업자 스레드를 종료 할 수 있습니다 false 인 경우
또한 블록 함수가 반환 된 후에 델타가 렛트인지 확인한 다음 5 초 인지 확인하고 APC OnSucess를 대기시킵니다. (질문은 종료합니까 호출자 스레드가 타이머도 취소합니까? 기본적으로 타이머가 쓸모 없다는 이유로)
ps - 내가 타이머 함수 내에서 작업자 스레드를 취소 할 수 있는지를 알 수 있다면 나는 심지어 gettickcount 물건이 필요하다고 생각해.
감사합니다.
어떤 스레딩 API를 사용하고 있습니까? Pthreads? 스레드를 늘리시겠습니까? – mch
이 차단 방법은 무엇을합니까? 당신은 Windows 입출력 완료 포트 및 SleepEX()를 활용할 수 있습니까? –
windows? 리눅스? 맥 OS? –