非活动应用程序不定时进入睡眠,定时器失效,App Nap

1.问题:不将软件作为当前活动应用程序或者进入到屏保模式,软件定时器不按照指定间隔执行对应的槽函数导致。

2.环境:MacOS系统

3.原因

2013年,App Nap加入到MacOS系统,该机制主要是阻止非活动应用程序使用CPU和其他系统资源,节省电能消耗(省电)。App Nap 是一项 macOS 省电功能,可减少后台应用程序的 CPU 时间。 这样做的一个影响是计时器不再是及时的。

4.解决方案,关闭App Nap机制

4.1 关闭整个系统的App Nap机制

//启用/禁用App Nap

defaults write NSGlobalDomain NSAppSleepDisabled -bool YES

defaults delete NSGlobalDomain NSAppSleepDisabled

4.2 关闭单个软件的App Nap机制

1建个头文件appnap.h

//appnap.h

#include "qglobal.h"

#import <objc/objc.h>

class AppNapDisabler

{

public: AppNapDisabler();

~AppNapDisabler();

AppNapDisabler(const AppNapDisabler&) = delete;

AppNapDisabler& operator=(const AppNapDisabler&) = delete;

private: id m_activity;

 };

(2) 建个objc文件appnap.mm

//appnap.mm

#include "appnap.h"

#import <AppKit/AppKit.h>

AppNapDisabler::AppNapDisabler()

{

    m_activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityBackground

                                                                reason:@"Qt Auto Test"];

    [m_activity retain];

}

AppNapDisabler::~AppNapDisabler()

{

    [[NSProcessInfo processInfo] endActivity:m_activity];

    [m_activity release];

}
(3)在Qt项目配置(.pro)文件中加入下面这行

OBJECTIVE_SOURCES += appnap.mm

并将appnap.mm在另一个变量SOURCES中去除(建文件时会自动加在里面)

4在main函数中加入

AppNapDisabler appNap;

参考:

关于在macOS上运行Qt窗口程序遇到的坑_chexiaohui6306的博客-CSDN博客

如何解决c++编程中,(Qt::Timer)在macOS环境中,最小化窗口后一段时间就自动停止的问题? - 知乎

什么是App Nap?它是否减少我的Mac应用程序? | MOS86

什么是App Nap?它是减少我的Mac应用程序?-howtoip.com在线科技杂志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值