1

已弃用的 UpdateSystemActivity() 通过“通知电源管理器已发生活动并且用于测量空闲时间的计时器应更新到此调用的时间”来工作。

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

是否有任何不推荐的方法可以重置计时器以测量空闲时间?

谢谢!

4

3 回答 3

1

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

我没有观察到 macOS 10.15 的这种行为,而不是IOPMAssertionCreateWithName(...). 与文档相反,IOPMAssertionDeclareUserActivity(...)它的行为似乎UpdateSystemActivity()需要定期调用。

请参阅屏幕保护程序计时器事件 示例/common/ScreenSaver.cpp的片段

于 2020-09-22T07:22:26.220 回答
0

我遇到了同样的问题,并发现了这个指向函数的密切相关的问题。IOPMAssertionDeclareUserActivity

你可以使用这个:

IOPMAssertionID assertionID; 
IOPMAssertionDeclareUserActivity(CFSTR(""), kIOPMUserActiveLocal, &assertionID);
于 2017-02-01T22:30:59.197 回答
0

这是 Swift 3.x 中的答案:

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

于 2017-02-22T04:53:37.717 回答