gpt4 book ai didi

cocoa - 在 OS X 上防止 sleep 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 16:03:15 25 4
gpt4 key购买 nike

Possible Duplicate:
How to programmatically prevent a Mac from going to sleep?

当前版本的 OS X (10.7) 上防止应用程序或进程运行时进入休眠状态的正确方法是什么?

特别是IOCancelPowerChange仍然(或曾经)达到这个目的吗?我调用IOCancelPowerChange回应kIOMessageCanSystemSleep ,但这并不能解决问题。

<小时/>

本质上是same question因为这个的第一部分之前已经被问过,但是 documentation它指向的内容已经很老了,而且答案从未被接受。

最佳答案

IOCancelPowerChange 继续工作,但仅适用于空闲触发的 sleep ;它不适用于由 Finder 的“ sleep ”菜单项、以编程方式请求或按电源按钮触发的 sleep 。

苹果的Q&A1340回答问题“问:当计算机进入休眠状态或从 sleep 状态唤醒时,我的应用程序如何收到通知?如何阻止 sleep ?”

list 2 Q&A1340 :

#import <IOKit/pwr_mgt/IOPMLib.h>

// kIOPMAssertionTypeNoDisplaySleep prevents display sleep,
// kIOPMAssertionTypeNoIdleSleep prevents idle sleep

//reasonForActivity is a descriptive string used by the system whenever it needs
// to tell the user why the system is not sleeping. For example,
// "Mail Compacting Mailboxes" would be a useful string.

// NOTE: IOPMAssertionCreateWithName limits the string to 128 characters.
CFStringRef* reasonForActivity= CFSTR("Describe Activity Type");

IOPMAssertionID assertionID;
IOReturn success = IOPMAssertionCreateWithName(kIOPMAssertionTypeNoDisplaySleep,
kIOPMAssertionLevelOn, reasonForActivity, &assertionID);
if (success == kIOReturnSuccess)
{

//Add the work you need to do without
// the system sleeping here.

success = IOPMAssertionRelease(assertionID);
//The system will be able to sleep again.
}

请注意,您只能停止空闲时间 sleep ,而不能停止用户触发的 sleep 。

对于支持 Mac OS X 10.6 及更高版本的应用程序,请使用新的 IOPMAssertion 函数系列。这些函数允许其他应用程序和实用程序看到您的应用程序不希望休眠的愿望;这对于与第三方电源管理软件无缝协作至关重要。

关于cocoa - 在 OS X 上防止 sleep 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460033/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com