主线程上的IOS semaphore_wait_trap导致在UI中挂起

我在异步(串行)工作队列中有一个很长的运行功能。
我知道有时这个功能挂在一个特定的openCV调用中。
由于某种原因,这个挂起也导致主线程挂起。
当暂停并进入调试模式时,我看到有一个调用

semaphore_wait_trap()

在主线程(Queue)

我可以在调试模式下挂起挂线(我的工作队列),然后这个陷阱消失,GUI在手机上再次响应。

拔除工作线程后,GUI响应1-2秒(我怀疑直到此线程再次被激活),然后UI再次无响应。

该线程不会对主线程/队列进行dispatch_sync()调用

因为工作人员长时间运行,IOS是否可以暂停主线程(“陷阱”)呢?

可以强制它去除块吗?

我添加了一些打印屏幕的调试模式堆栈。

挂起前挂起队列:

和挂线:

暂停和暂停坏排队后:

因为工作人员长时间运行,IOS是否可以暂停主线程(“陷阱”)呢? – 否
我想,你的问题与绘制或改变一些UI元素有关。并不是所有的功能都可以从后台线程调用(例如,更改UI元素必须在主线程中完成)。在串行队列中,如果有任何方法需要更改UI元素,则必须在主线程上调用它,例如

dispatch_async(dispatch_get_main_queue(), ^{
                //do some main thread job here
            });
)
http://stackoverflow.com/questions/13473448/ios-semaphore-wait-trap-on-main-thread-causing-hang-in-ui

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:主线程上的IOS semaphore_wait_trap导致在UI中挂起