作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序会触发一个线程,专门用于检查进程的状态。每 5-10 秒触发一次:
if(!monitorTask){
MYLog(100,@"Monitor task is dead");
return;
}
dispatch_async(monitorTask,^{ // fuckup here
MYLog(150,@"...Checking iTunes");
但是它似乎也经常卡在那里:
有什么线索可以解决/捕获这个问题吗?该应用程序正在沙滩上玩耍,但在 Xcode 中“运行”得很好 - 遵循此指令:
最佳答案
你确定monitorTask的类型是dispatch_queue_t
吗? See these Apple guides for an example of how to create a serial queue
尽管我在您的评论中看到您正确创建了队列。
队列也有可能在您可以分派(dispatch)给它之前被释放。您可能需要perform some memory management放在您的队列中,以确保在您调度之前它不会被释放。
最后值得注意的是,串行队列总体上用于保护共享资源。如果您只是尝试对资源执行定期检查(一项永远不会写入而只会读取的任务),那么您最好使用并发队列(您可能应该只使用 4 given global queues, 之一)
或者因为您似乎在应用程序的整个生命周期中不断进行检查,您甚至可以考虑使用 Dispatch Source ,更具体地说是定时器调度源
关于multithreading - Cocoa OSX 应用程序卡在dispatch_async 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32248857/
我是一名优秀的程序员,十分优秀!