我们在MacOS上的线程中等待并且主窗口被隐藏时出现问题,即使我们要求等待100毫秒,等待功能也需要10秒。
主程序在Cocoa窗口上运行,另一个线程永久运行,每次迭代等待100ms。 当主窗口可见时,一切正常,但是一旦窗口被隐藏,问题就会在一段时间后开始发生,即等待开始等待几秒钟。我们怀疑系统经常停止唤醒应用程序,因为它不再可见。
我们正在使用pthread_con_wait,但使用usleep或boost :: sleep(可能使用相同的下面)会发生同样的问题。
有没有办法阻止这个或一个标志设置告诉系统我们仍然在运行,我们想要被唤醒?
由于
答案 0 :(得分:1)
如果是OS v10.9或更高版本,您的应用可能会小睡: Power Efficiency Guide for Mac Apps
文档说,可以使用NSProcessInfo
类来阻止它。
管理活动
该系统具有启发式功能,可以改善电池寿命,性能和性能 应用程序的响应性为用户的利益。您可以 使用以下方法来管理提供提示的活动 您的应用程序有特殊要求的系统:
beginActivityWithOptions:reason: endActivity: performActivityWithOptions:reason:usingBlock:
为了响应创建活动,系统将禁用某些或 所有的启发式方法,以便您的应用程序可以快速完成 如果用户需要,仍然提供响应行为。
...
id activity = [[NSProcessInfo processInfo] ? beginActivityWithOptions:NSActivityLatencyCritical reason:@"Good Reason"]; // Perform some work. [[NSProcessInfo processInfo] endActivity:activity];
请注意,
NSActivityLatencyCritical
表示活动的标志需要最高的计时器和I / O精度。
重要很少有应用程序需要使用此常量。