2012-08-14 197 views
0

讓我首先說我是一個完全的Objective-C新手,並且我正在拾取一個現有的代碼庫,所以我試圖瘋狂地閱讀有關NSRunLoop等,但我會喜歡一些額外的幫助。在startRunningQTCaptureSession:開始運行阻塞線程

[[NSRunLoop mainRunLoop] runUntilDate:[NSDate distantFuture]]; 
[_captureSession startRunning]; 
return [NSNumber numberWithInt:0]; 

在的應該返回一個函數,而是永遠塊:

基本上,我繼承的代碼看起來像。我需要這個返回,我不知道爲什麼它阻止。一些分散的代碼可能會有所幫助:

_captureDecompressedVideoOutput = [[QTCaptureDecompressedVideoOutput alloc] 
            init]; 
[_captureDecompressedVideoOutput setDelegate:self]; 
[_captureDecompressedVideoOutput performSelectorOnMainThread:@selector(setPixelBufferAttributes:) withObject:captureDictionary waitUntilDone:NO]; 

任何想法發生了什麼?

回答

0

好,我卡住[_captureSession startRunning]在一個單獨的函數,然後替換

self performSelectorInBackground:@selector(backgroundCapture) withObject:nil]; 

因此它在一個線程運行了呼叫。不僅阻塞不會干擾返回的方法(因爲它在一個單獨的線程上),而且現在調用並沒有阻止它在它自己的線程上運行。離奇。

+0

我在OSX 10.8上使用XCode 4.5在QTCapture會話中看到了一些類似的怪異行爲。我發現[這個示例命令行應用程序]運行正常,但只有當它使用[NSThread啓動]運行... 我剛剛開始使用AVCaptureSession(我知道這是iOS上可用,但最近才意識到也可用在Mac上),這更直截了當。 (我碰到的唯一呃逆是你必須說「setWantsLayer」和「setLayer」來給出一個CALayer的視圖,以便與AVCaptureVideoPreviewLayer一起使用。)我還了解到AVCaptueSession應該取代QTCaptureSession ... – bellkev 2012-10-31 07:12:10