替换已弃用的UpdateSystemActivity()以重置用于测量空闲时间的计时器。

时间:2016-11-03 17:44:43

标签: driver deprecated power-management sleep-mode idle-timer

不推荐使用的UpdateSystemActivity()通过“通知电源管理器已经发生了活动并且用于测量空闲时间的定时器应该更新到此调用的时间”来工作。

文档建议使用IOPMAssertionCreateWithName(...),但此方法不会重置计时器的空闲时间;它会阻止机器永远睡眠,直到调用IOPMAssertionRelease(...)。使用IOPMAssertionCreateWithName(...)不适合我当前的代码库。

是否有任何非弃用方法重置计时器以测量空闲时间?

谢谢!

3 个答案:

答案 0 :(得分:1)

“它可以防止机器永远休眠直到调用IOPMAssertionRelease(...)为止”

我在macOS 10.15上没有观察到这种行为,不是IOPMAssertionCreateWithName(...)的情况。与文档相反,IOPMAssertionDeclareUserActivity(...)的行为类似于UpdateSystemActivity(),需要定期调用。

请参阅“屏幕保护程序”计时器事件的摘要 examples/common/ScreenSaver.cpp

答案 1 :(得分:0)

我遇到了同样的问题,discovered this closely related question指向IOPMAssertionDeclareUserActivity函数。

您可以使用:

IOPMAssertionID assertionID; 
IOPMAssertionDeclareUserActivity(CFSTR(""), kIOPMUserActiveLocal, &assertionID);

答案 2 :(得分:0)

以下是Swift 3.x中的答案:

var assertionID : IOPMAssertionID = 0 _ = IOPMAssertionDeclareUserActivity("TeslaWatcher" as CFString, kIOPMUserActiveLocal, &assertionID)