gpt4 book ai didi

multithreading - Cocoa OSX 应用程序卡在dispatch_async 上

转载 作者:行者123 更新时间:2023-12-03 17:20:12 24 4
gpt4 key购买 nike

我的应用程序会触发一个线程,专门用于检查进程的状态。每 5-10 秒触发一次:

if(!monitorTask){
MYLog(100,@"Monitor task is dead");
return;
}
dispatch_async(monitorTask,^{ // fuckup here
MYLog(150,@"...Checking iTunes");

但是它似乎也经常卡在那里:

enter image description here

有什么线索可以解决/捕获这个问题吗?该应用程序正在沙滩上玩耍,但在 Xcode 中“运行”得很好 - 遵循此指令:

enter image description here

最佳答案

你确定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/

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