私は可変サイズ(数MBから1GB以上まで)のQTMovieオブジェクトを取り出し、ディスクにエクスポートするのに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);
ありがとうございました。これは実際に正しい方向に私を指摘した。 64ビットアプリケーションでは、 - (Movie)quickTimeMovieメソッドは使用できません.32ビットアプリケーションのみです。私は ' - (BOOL)detachFromCurrentThread'が実際に' DetachMovieFromCurrentThread'をその実装で使用しているので、なぜ失敗したのかを説明すると思います。それを働かせるためには、私がしなければならなかったのは、64ビットではなく32ビットとしてコンパイルするためにアプリを変換することでした。ほとんど理想的ですが、少なくとも動作します。 – jcocoa5