2009-11-18 5 views
0

AVAudioPlayer의 재생, 타이머 및 파일 쓰기 작업이 동시에 하나 이상의 프로세스를 시작해야합니다.iPhone - 두 개의 프로세스를 동시에 시작하십시오.

방금 ​​방법으로 작성하면 모든 명령이 순차적으로 실행되고 모든 작업의 ​​시작이 약간 지연됩니다.

아이디어가 있으십니까? 어떤 도움을 주시면 감사하겠습니다.

감사합니다.

답변

2

왜 스레드를 사용하지 않습니까?

- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg 

을하거나 NSOperationQueueNSOperation를 사용하여 :

당신은 사용하여 쉽게 할 수 있습니다.

자세한 내용은 this question을 참조하십시오.

참고 : 당신이 또 다른 runloop을해야 다른 스레드에서 타이머를 사용하려면 어떤 오토 릴리즈 클래스

  • 를 사용하는 경우

    • 당신은 당신의 스레드에서 오토 릴리즈 풀을해야합니다.
    • 실 안전을 조심하십시오. 예를 들어 AVAudioPlayer를 주 스레드와 다른 스레드에서 사용할 수 있는지 여부는 알 수 없습니다.
    • 난 당신이 여기에 잘못된 접근을 할 수있는 NSOperation
  • +2

    한 번만 수행하는 경우 performSelectorInBackground가 가장 간단한 코드입니다. 그러나 당신이 그것을 많이한다면 그것은 최적이 아닙니다. NSOperation 경로를 제안합니다. –

    +0

    고마워요. – lostInTransit

    1

    추가 너무 많은 동시성 내에서 NSTimer을 예약 할 수 있습니다 생각하지 않습니다. 백그라운드 스레드에서 블로킹 파일 쓰기 호출을 수행하는 동안 타이머 설정 및 주 스레드에서 오디오 파일 재생을 조사 할 수 있습니다. 중요한 개념은 특히 파일 또는 네트워크 I/O를 처리 할 때 주 스레드에서 호출을 차단하지 못하게하는 것입니다.

    iPhone이 단일 CPU 장치이기 때문에 추가 스레드가 너무 많이 생성되는 것을 피하고 다중 스레드로 인해 더 많은 리소스가 소모됩니다.

    관련 문제