我在異步(串行)工作隊列中有一個很長的運行函數。 我知道有時候這個函數掛在一個特定的openCV調用中。 由於某種原因,此掛起還導致主線程掛起。 當暫停並進入調試模式,我看到有處於調試模式,那麼這個主線程上在主線程上導致在UI中掛起的IOS semaphore_wait_trap
semaphore_wait_trap()
通話(隊列)
我可以暫停懸吊線(我的工作隊列)陷阱消失,GUI再次在手機上響應。
取消暫停工作線程後,GUI響應1-2秒(我懷疑直到此線程再次激活),然後UI再次變得無響應。
這個線程不作任何dispatch_sync()
調用主線程/隊列
有沒有可能是IOS暫停主線程(「陷阱」的話),因爲工作是長時間運行?
我可以強制它刪除塊?
我正在添加調試模式堆棧的一些打印屏幕。
前懸掛掛隊列:
而懸吊線:
和暫停和中止壞隊列後:
是「pixtr」您還是第三方產品? 。如果它的第三方,我會考慮從你的UI分離它,看看這是否是問題 –
在這裏沒有很多東西(特別是,我不知道'add_blob'中有什麼),所以我最好的是猜測。我懷疑是你將不正確的標誌傳遞給了'cvFloodFill',這導致它掛起了GPU的鎖定。由於UIKit也希望GPU能夠計算滾動(DYTransport是一個與GPU計算相關的私有框架),所以這會掛起UIKit,等待GPU可用。 –