gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 07:58:07 24 4
gpt4 key购买 nike

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

semaphore_wait_trap()

在主线程(队列)上

我可以在 Debug模式下挂起挂起的线程(我的工作队列),然后这个陷阱就会消失,GUI 在手机上再次变得有响应。

取消暂停工作线程后,GUI 会响应 1-2 秒(我怀疑直到再次激活该线程),然后 UI 再次变得无响应。

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

IOS 是否有可能因为 worker 长时间运行而暂停主线程(“捕获”它)?

我可以强制它移除 block 吗??

我正在添加 Debug模式堆栈的一些打印屏幕。

挂起队列之前:

Main Queue Stack

还有挂线:

Hanging Queue

在暂停和挂起坏队列之后:

After Suspending

最佳答案

IOS 是否有可能因为 worker 长时间运行而暂停主线程(“捕获”它)? - 不。我认为,您的问题与绘制或更改某些 UI 元素有关。并非所有函数都可以从后台线程调用(例如,必须在主线程中完成对 UI 元素的更改。)。在您的串行队列中,如果任何方法需要更改 UI 元素,您必须在主线程上调用它,例如

dispatch_async(dispatch_get_main_queue(), ^{
//do some main thread job here
});
)

关于主线程上的 IOS semaphore_wait_trap 导致 UI 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13473448/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com