2012-02-02 4 views
2

그래서 QTMovie 개체를 가변 크기 (몇 MB에서 1GB 이상까지) 가변 크기로 가져오고 writeToFile:withAttributes:을 사용하여 디스크로 내 보냅니다. 이 작업은 오랜 시간이 걸리고 UI를 잠급니다. Grand Central Dispatch를 사용하여 다른 스레드에 넣기로했습니다.QTMovie에서 내 UI의 작동을 멈추게 할 수 있습니까?

내가 말할 수있는 한, writeToFile:withAttributes:을 사용하는 경우를 제외하고는 응용 프로그램을 여전히 잠그고 있다는 것을 제외하고는 완벽하게 작동합니다. 파일을 내 보내지 만 완료 될 때까지는 UI로 아무 것도 할 수 없습니다.

QTKit 및 Google의 다양한 장소에서 여러 개의 스레드를 사용하여 모든 문서를 살펴 봤지만 사용해 본 것이 없습니다.

다음

는 문제를 갖는 것으로 보인다 코드입니다 :

[movie detachFromCurrentThread]; 

dispatch_queue_t combineQueue = dispatch_queue_create("com.Combinate.movieCombineQueue", NULL); 

dispatch_async(combineQueue, ^{ 

    [QTMovie enterQTKitOnThreadDisablingThreadSafetyProtection]; 
    [movie attachToCurrentThread]; 
    [movie writeToFile:filepath withAttributes:exportAttributes]; 

    [movie detachFromCurrentThread]; 
    [QTMovie exitQTKitOnThread]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     [movie attachToCurrentThread]; 
     [self finishedCombiningAudioFiles:(QTMovie *)movie]; 
    }); 

}); 

dispatch_release(combineQueue); 

답변

0

그래서 나는 또한 백그라운드 스레드에서 영화 기록을하려고했습니다, 그리고 나는 매우입니다 애플이 있었다 샘플 코드를 사용 당신이 거기있는 것과 비슷하지만 이상한 것을 발견했습니다.

나는 고장이 어디에 보려고 시작하고 나는

실제로 (당신이 정말 빨리 자신을 확인할 수 있습니다 실패했다 , 그것은 성공 BOOL을 반환

[movie detachFromCurrentThread] 
가.

내가 무슨 알아낼 수 있다는 것을 발견 QTKit이 분리 작업을 중단하는 것을 막기 위해 여러 가지 속성을 설정해 보았지만 분리 할 수있는 변경 사항은 아무것도 변경하지 않았습니다. 분리하지 않는 것이 더 이상 문제를 일으키지 않는다는 것이 다소 이상한 일이지만 어떤 이유로 든 나머지 코드를 강제 실행하는 것 같습니다. 주 스레드를 계속 사용합니다. 분리가되지 않는 경우에도 작동합니다. UI를.

OSErr er = DetachMovieFromCurrentThread([movie quickTimeMovie]); 

실제로 QTKit이나 호출이 실패 할 때 나를 위해 분리를합니까 : 퀵타임 당신이 기능을 얻을 수있는 프레임 워크로는 좀 더 깊이 잠수하면

또한 프로빙은, 나에게 수정을 부여하고있다. 그러면 영화가 배경에 행복하게 쓰여지고 UI가 더 이상 정지되지 않습니다.

잘하면 그 일이 당신을 위해 움직이게 될 것입니다.

+0

도움 주셔서 감사합니다. 이것은 실제로 올바른 방향으로 나를 가리켰다. 분명히, '- (Movie) quickTimeMovie' 메소드는 64 비트 애플리케이션에서는 사용할 수 없으며 32 비트 애플리케이션에서만 사용할 수 있습니다. 나는 (BOOL) detachFromCurrentThread'가 실제로 그것의 구현에서'DetachMovieFromCurrentThread'를 사용하고 있는데 왜 실패 하는지를 설명 할 것이라고 생각합니다. 작동 시키려면 64 비트가 아닌 32 비트로 컴파일되도록 앱을 변환해야했습니다. 거의 이상적이지만 적어도 작동합니다. – jcocoa5