【发布时间】:2012-07-12 18:02:34
【问题描述】:
wait_fences:收不到回复:10004003
我继续收到此错误。它发生在我的应用程序启动时。我将如何调试这个问题。有什么方法可以让我观察 wait_fences,看看那里发生了什么。有什么方法可以查看哪些线程阻塞了什么?
感觉这个错误只不过是一个没有工具或信息进入或离开虚空的黑洞。
任何有调试此错误提示的人将不胜感激。
新
我现在改变了我的线程,所有线程调用都通过这个方法集来完成他们所有的调度
注意: 另外,我希望你们不要仅仅因为看到有关此问题的另一个问题而投票结束我的问题。没有关于此错误的真实信息。我需要知道是什么导致了这个错误和/或如何调试它。不是常见的“将超级调用添加到您的 viewDidAppear 等。如果这些有帮助,我就不会问这个问题了。
+ (void) ensureDispatchOfBlock:(dispatch_block_t) block onQueue:(dispatch_queue_t) queue async:(BOOL) async{
if (dispatch_get_current_queue() == queue){
block();
}
else {
if (async){
dispatch_async(queue, block);
}
else {
dispatch_sync(queue, block);
}
}
}
+ (void) ensureDispatchOnMainThread:(dispatch_block_t) block async:(BOOL) async{
[self ensureDispatchOfBlock:block onQueue:dispatch_get_main_queue() async:async];
}
+ (BOOL) addBlock:(dispatch_block_t) block toQueue:(dispatch_queue_t) queue async:(BOOL) async {
if (!async && dispatch_get_current_queue() == queue){
return NO;
}
if (async){
dispatch_async(queue, block);
}
else {
dispatch_sync(queue, block);
}
return YES;
}
【问题讨论】:
-
您是否尝试在后台线程上更新 UI 元素?
-
我确实检查了所有这些。我不相信我正在做任何动画,但我有两种竞争方法正在高优先级线程上调度。我评论一个或另一个,我仍然得到错误,评论两者都会使错误消失。我正在处理所有线程部分,以便仅在需要时将它们转换为检查和调度。但我认为 dispatch_async 将它们放在我希望它们连续运行的队列中。
-
我已经从我的启动中删除了 UI 代码,并且我已经修改了所有调度以使用上面提供的代码。在我运行应用程序的 4 次中,仍然会弹出 3 次错误
标签: ios multithreading wait-fences