我有一个MacOS/X应用程序,它通常不反对应用程序打盹,但有时它会生成一个或多个子线程来执行时间敏感的网络任务,这确实需要避免被应用程序打盹。
最好的做法是让这些线程中的每一个在启动时调用[[NSProcess processInfo] beginActivityWithOptions [...]]
,并在退出前调用[[NSProcess processInfo] endActivity [...]]
,这样(希望(只有在一个或多个网络线程运行时,才能避免应用程序在我的进程上(或至少在那些特定线程上(打盹。
我的问题是,这是一种合法/可接受的调用模式,还是NSProcessInfo
更像是一种完全成功的API,它不实现线程安全引用计算逻辑,如果我从多个线程调用它,可靠地产生预期行为是必要的?(如果是后者,我可以自己实现这个逻辑,但我不想在这里重新发明轮子(
此API被视为进程范围,用于报告整个应用程序正在执行特定类型的工作,该工作应该或不应该受到节能启发法的影响(同样,节能启发法是进程范围,而不是进程范围(。
使用它的最佳方式是在所有后台线程开始之前开始一个活动,并在所有重要后台线程完成之后完成它。
您可以使用DispatchGroup或任何其他您想要的工具来完成此操作。
但这并不是唯一的办法。
beginActivityWithOptions将返回_NSActivityAssertion,它通常不知道线程。你可以把你自己的线程同步机制带到这个聚会上。
多次调用此API将创建多个_NSActivityAssertion对象,这在定义上是多余的,但如果您能正确地结束每个对象,则应该可以工作。
首先,这个API应该或不应该受到节能启发的影响。
使用它的最佳方式是将其与调度组一起使用