플래그로 제어되는 루프를 통해 활성 상태로 유지되는 작업자 스레드가 있습니다. 스레드가 원격 서버에 대한 영구 연결을 열 때 응용 프로그램의 길이만큼 살아 있어야합니다.긴 수명 스레드가 performSelectorOnMainThread를 호출하지 않습니다.
그 스레드를 해고하고 그것에 여러 가지 방법을 호출이 잘 작동하는 것 같다과 메서드를 호출 할
[worker performSelector:@selector(getBusy) onThread:worker withObject:nil waitUntilDone:NO];
. getBusy
에서 어떤 시점에서 내가 함께 메인 스레드에서 메소드를 호출하려고 :
[delegate performSelectorOnMainThread:@selector(gotBusy) withObject:nil waitUntilDone:NO
.
문제는 gotBusy
이 주 스레드에서 절대로 호출되지 않는다는 것입니다. 나는 NSLog() 문으로 그것을 뒤죽박죽으로 만들었고 콘솔에 출력 된 것을 볼 수 없었다.
디버깅하려면 무엇을해야합니까?
예, 주 짝수 루프가 잠자기 상태입니다. 귀하의 의견은 내 머리 속에 전구를 만들었습니다. – ruipacheco
우수 - 주 스레드를 차단하거나 절대로 절대로 사용하지 마십시오. 또한 정교한 이벤트 (예 : 데이터를 폴링하기 위해 1/10th마다 꺼지는 타이머)를 많이 예약하지 않아야합니다. – bbum
이것은 단위 테스트입니다. 플래그가 false로 설정되어있는 동안 잠을 자고 있었고 백그라운드 스레드가 주 스레드를 호출하지 못하도록 차단한다는 것을 인식하지 못했습니다. – ruipacheco