對不起,這有點羅嗦,但我想確保我清楚! ;-)NSOperationQueue的線程只是不死
我有一個使用FFMPEG流媒體RTSP的iOS應用程序。我使用NSOperationQueue進行了多線程FFMPEG,因此除了將圖像繪製到屏幕上之外,大多數工作都發生在後臺線程中。 太棒了! ......除了NSOperationQueue創建的線程永遠不會死!
我初始化隊列在類init方法用:
self->opQ = [[NSOperationQueue alloc] init];
[self->opQ setMaxConcurrentOperationCount:1];
我方法添加到隊列使用塊:
[self->opQ addOperationWithBlock:^{
[self haveConnectedSuccessfullyOperation];
}];
或者
[self->opQ addOperationWithBlock:^{
if (SOME_CONDITION) {
[self performSelectorOnMainThread:@selector(DO_SOME_CRAP) withObject:nil waitUntilDone:NO];
}
}];
後來時,我需要拆除RTSP流,除了告訴FFMPEG關閉,我打電話:
[self->opQ cancelAllOperations];
這確實阻止了線程從事任何工作,但從未真正銷燬它們。在下面,你會看到一個線程的屏幕截圖,它什麼都不做。這是我的線程多次啓動/停止FFMPEG後的樣子。
我似乎記得閱讀蘋果文檔在NSOperations和它們在一旦被執行完,除非另有引用被破壞運行的線程。這似乎並非如此。
難道我只需要摧毀NSOperationQueue,然後重新初始化它,當我需要啓動FFMPEG再次(我才意識到我沒有嘗試這樣做)?任何人都知道我需要如何殺死這些額外的線程?
謝謝!
爲什麼你在使用' - >'?請不要。 –
當您遇到此問題時,是否有任何操作實際留在隊列中? –
@jacob爲什麼不使用 - >?我已閱讀了多個文字,提示其用法。 還有其他的操作正在運行,因爲一個循環不斷地向隊列提供流媒體和播放視頻源的其他操作。 – u2Fan