Qt Mac阻止和启用休眠

news2025/1/17 23:05:02

阻止电脑休眠,在win下是使用win api实现的,用Qt跨平台开发,实现Mac的阻止休眠,也需要Mac本身的api来实现。经过网上查资料,找到了一个能用的,链接如下。原生mac开发用的是Object-c,所以该实现用的是oc。

Object-c与C++混编

为了使用mac原生接口,需要使用Object-c进行调用。Mac提供了Object-c和C++混合使用的方法。在C++里,一般创建类,.h作为头文件,.cpp为实现文件,我们只需把.cpp改为.mm,.mm里既可以写C++,也可以写Object-c,我们可以把这种混合编程的语言称为Object-C++。

需要注意的是,在qmake工程中包含.mm文件需要使用OBJECTIVE_SOURCES

OBJECTIVE_SOURCES += \
    $$PWD/myclass.mm

OBJECTIVE_HEADERS += \
    $$PWD/myclass.h

阻止和启用休眠

使用该接口,需要使用IOKit模块

 LIBS += -framework IOKit

.h中添加两个接口

bool preventSleep();
bool recoverSleep();
#import <IOKit/pwr_mgt/IOPMLib.h>

bool MacTools::preventSleep()
{
    //限制不重复执行
    if(isPrevent)
        return true;

    //官方例子用的文字说明
    CFStringRef reasonForActivity = CFSTR("Mail Compacting Mailboxes");
    IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
                                        kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
    qDebug() << __FUNCTION__ << "song" << success << assertionID;
    isPrevent = success == kIOReturnSuccess;
    return success == kIOReturnSuccess;
}

bool MacTools::recoverSleep()
{
    //执行过才支持取消
    if(!isPrevent)
        return true;

    IOReturn success = IOPMAssertionRelease(assertionID);
    qDebug() << __FUNCTION__ << "song" << success << assertionID;
    return success == kIOReturnSuccess;
}

代码量不多,基于官方的例子集成到项目中实现的,通过全局变量isPrevent防止重复执行,休眠类型有三种,可看接口文档

  • PreventSystemSleep---防止系统休眠
  • NoIdleSleepAssertion---防止空闲休眠
  • NoDisplaySleepAssertion---防止显示器休眠
reasonForActivity为激活原因,貌似不能随便设,我自定义了一个好像没生效,最后还是用的官方例子的文字说明

记录AssertionID,恢复休眠通过释放这个ID进行恢复

结语

代码量很少,关键是要了解怎么在C++中使用Object-C,再对官方例子进行调用封装。不过该实现只能防止电脑正常的息屏,不能阻止强制息屏,比如笔记本盖上盖子,低电量的息屏等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/144869.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kyligence 客户案例“泰康集团精细化经营分析与运营平台”获评数据智能最佳实践案例

近日&#xff0c;“2022 爱分析中国数据智能最佳实践案例”评选结果正式揭晓。Kyligence 携手泰康集团申报的“泰康集团精细化经营分析与运营平台”项目经过多轮角逐脱颖而出&#xff0c;最终获评“中国数据智能最佳实践案例”。同时&#xff0c;Kyligence 通过综合能力评估&am…

Linux Shell脚本编程提高

Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应…

保姆级教程 | 将Oxylabs住宅代理和数据中心代理与MultiLogin集成的操作步骤

MultiLogin是一款集多账户管理、浏览器指纹隐藏等功能于一体的实用解决方案。在您抓取所需公共数据时&#xff0c;将MultiLogin与值得信赖的代理结合使用&#xff0c;可以大幅降低被网站阻止情况发生的概率。 在本篇教程中&#xff0c;将带您学习简单的集成流程&#xff0c;手把…

数说热点 | 2022商业地产的“破局”与“新生”——逆境之下探索新兴可能

2022年&#xff0c;受国内新冠肺炎疫情因素影响&#xff0c;我国经济下行压力明显加大&#xff0c;尤其是部分产业链、供应链受到冲击&#xff1b;部分区域接触型、聚集型特征明显的线下消费表现低迷&#xff0c;给实体商业经营带来挑战。从市场表现看&#xff0c;2022年1-9月&…

数据架构之数据血缘:数据从哪里来,到哪里去

为了直观的感受数据血缘&#xff0c;先从网上找了两张典型的数据血缘的图。下图特点是按照数据仓库数据管理模型给出了基于表&#xff08;实体&#xff09;的数据血缘图。 此图是截取Solidatus软件生成的数据血缘图&#xff0c;该图与上图的区别在于给出了基于属性的数据血缘图…

【纯净题目版】笔试题-2023禾赛-FPGA

题目背景 笔试时间&#xff1a;2022.06.22应聘岗位&#xff1a;FPGA开发工程师 题目评价 难易程度&#xff1a;★★☆☆☆知识覆盖&#xff1a;★☆☆☆☆超纲范围&#xff1a;☆☆☆☆☆值得一刷&#xff1a;★☆☆☆☆ 文章目录1. 使用最少的电路实现二分频&#xff0c;给出…

ubuntu20.04 arm-linux-gnueabihf交叉编译opencv4.7.0 与opencv-contrib-4.7.0

安装交叉编译工具链编译的目标硬件是RV1126&#xff0c;编译工具链为32位的arm-linux-gnueabihf&#xff0c;本次使用的是8.3版本&#xff0c;可在Downloads | GNU-A Downloads – Arm Developer进行下载。下载后&#xff0c;解压到自己的安装目录&#xff0c;比如解压到/opt目…

Seata客户端

一个调用链中的所有微服务都是seata的客户端&#xff0c;都必须走下面的步骤 第一步&#xff1a;创建undo_log表 下载地址&#xff1a;https://github.com/seata/seata/tree/develop/script/client/at/db -- for AT mode you must to init this sql for you business databa…

海南三亚游记2022-2023跨年

文章目录1、概述2、交通2.1、广州飞三亚2.2、做高铁&#xff0c;三亚到海口2.3、海口飞广州3、风景3.1、吉阳区3.2、天涯区4、美食5、住宿6、补充2014年海南游记1、概述 2022-12-30~2023-01-04&#xff0c;海南三亚游记&#xff0c;旨在记录攻略 之前已经去过海南2次&#xff…

数据结构的相关概念

基本概念和术语 数据是对客观信息的一种描述&#xff0c;它是由能被计算机识别与处理的数值、字符等符号构成的集合。 数据元素是数据的基本单位&#xff0c;在计算机程序中通常作为一个整体进行考虑和处理。 关键码值的是数据元素中能起标识作用的数据项。 关系指的是集合…

MFC/WIN32程序美化之使用skinH更换皮肤

官网 https://www.skinsharp.com/htdocs/index.htm 使用比较简单 使用到skinH.dll,这是程序运行的动态支撑库,还有skinH.lib文件,编译时用到的。还有SkinH.h头文件,里面包含了skinH.dll的库函数和功能注释、宏定义 使用VS创建一个WIN32项目 这就是默认的窗体效果了 加了…

SpringBoot AOP

SpringBoot AOP 目录SpringBoot AOP写法一&#xff1a; Before("execution(* com.bjpowernode.springboot07.javabean.Man.eat(..))")一、AOP开发1.1 概述1.2使用方法1.3创建项目并添加maven依赖1.4 创建Javabean测试类1.5 创建切面1.6 测试类1.7 测试结果1.8 结论1.…

pytest学习和使用16-HTML报告如何生成?(pytest-html)

16-HTML报告如何生成&#xff1f;&#xff08;pytest-html&#xff09;1 插件介绍2 pytest-html安装3 生成报告3.1 插件执行方式3.2 执行效果3.3 指定报告生成的路径4 合并css5 报告中的行显示设置6 报告增强6.1 自定义css6.2 报告标题6.3 环境6.4 其他摘要信息6.5 Extra内容6.…

198. 打家劫舍

198. 打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个…

MySQL调优-Innodb引擎SQL执行的BufferPool缓存机制

目录 Innodb引擎SQL执行的BufferPool缓存机制 为什么Mysql不能直接更新磁盘上的数据而且设置这么一套复杂的机制来执行SQL了&#xff1f; 为什么直接更新磁盘是随机读写&#xff1f;为什么读写磁盘的日志文件是顺序读写&#xff1f; 为什么不直接读写磁盘而是选择读写Buffer…

【吐槽贴】项目经理的进阶日常:项目要收尾了,我却慌了

最近忙着写年终总结&#xff0c;还以为这次的年终奖稳了&#xff0c;结果犯了一个致命的错误&#xff0c;年终奖差点都没了。我负责的一个项目由于客户方比较着急&#xff0c;计划在过年放假前要完成交付&#xff0c;项目进度都完成的差不多了。现在还剩近10天的工期&#xff0…

2022尚硅谷SSM框架跟学(二)MyBatis基础二

2022尚硅谷SSM框架跟学二MyBatis基础二6.MyBatis的各种查询功能6.1查询一个实体类对象6.2查询一个list集合6.3查询单个数据MyBatis别名对应文档6.4查询一条数据为map集合6.5查询多条数据为map集合(1)方式一(2)方式二7.特殊SQL的执行7.1模糊查询7.2批量删除7.3动态设置表名7.4添…

SpringBoot+VUE前后端分离项目学习笔记 - 【16 SpringBoot集成JWT】

JWT简介 JWT是json web token缩写。用点号分为三段&#xff0c;分别表示头、信息和签名。可以使用在RESTFUL接口定义&#xff0c; 也可以使用在普通的web。它将用户信息加密到token里&#xff0c;服务器不保存任何用户信息。服务器通过密钥验证token的正确性&#xff0c;判断是…

模板的基本概念

模板函数模板泛型编程基本概念函数模板格式函数模板的实现函数模板的实例化类模板类模板格式类模板的实例化模板参数的匹配原则复数的相加函数模板 泛型编程 泛型编程是编写与类型无关的通用代码&#xff0c;是代码复用的一种手段。模板是泛型编程的基础。 基本概念 函数模…

【自学C++】C++命名空间引入

C命名空间引入 C命名空间引入教程 C 中的命名空间的引入&#xff0c;我们通常使用 using 语句后面加上命名空间名即可。 C命名空间引入详解 语法 using namespace namespaceName参数 参数描述using引入命名空间使用的关键字。namespace引入命名空间使用的关键字。namespa…