首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止后台应用程序中的NSTimer触发延迟

防止后台应用程序中的NSTimer触发延迟
EN

Stack Overflow用户
提问于 2018-05-24 14:47:59
回答 1查看 288关注 0票数 0

我正在开发一个macOS应用程序(我们称之为“显示应用程序”),它显示时钟和其他数据,该应用程序由同一台计算机上的另一个应用程序(“控制应用程序”)通过TCP连接控制。我注意到,当显示应用程序空闲了一段时间(> 60秒)。然后调度一个NSTimer (有一个.2第二间隔),它需要很长的时间才能第一次触发定时器(在6-10秒的范围内,有时更长)。这种情况主要发生在显示应用程序不是最前端时(因为控制应用程序是最前面的)。一旦计时器第一次启动,它就会像预期的那样工作(计时器中会有一些小的、预期的延迟)一段时间。

但是,当计时器运行很长时间(超过5分钟)时,在发射之间也会出现类似的极端延迟(也就是6-10秒)。它看起来像手动调度计时器与

代码语言:javascript
复制
[[NSRunLoop mainRunLoop] addTimer:_timer forMode:NSRunLoopCommonModes];

稍微推迟一些问题(使用[NSTimer scheduledTimer...]比手动将问题添加到运行循环时更快地出现该问题。)

这会造成很多麻烦,因为在这段时间内时钟没有更新。

我认为这是因为macOS在某种程度上认为显示应用程序“空闲”或“不活动”。

是否有预防、控制或规避这种行为的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 14:30:56

我是App小睡。该显示应用程序可以执行以下操作以避免午睡:

代码语言:javascript
复制
id activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityUserInitiatedAllowingIdleSystemSleep reason:@"whatever"];

当它允许再次午睡时,您应该这样做:

代码语言:javascript
复制
[[NSProcessInfo processInfo] endActivity:activity];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50512279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档