IOCancelPowerChange
continua a funzionare ma solo per il sonno con attivazione inattiva; non funzionerà per il sonno attivato dalla voce di menu Sleep del Finder, richiesta a livello di programmazione o da una semplice pressione del pulsante di accensione.
Q&A1340 di Apple risponde alla domanda "D: In che modo la mia applicazione può ricevere una notifica quando il computer è inattivo o si sta svegliando dal sonno? Come si impedisce il sonno?"
Listing 2 di 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.
}
Si noti che si può fermare solo dormire tempo di inattività, non dormono attivato dall'utente.
Per le applicazioni che supportano Mac OS X 10.6 e versioni successive, utilizzare la nuova famiglia di funzioni IOPMAssertion. Queste funzioni consentono ad altre applicazioni e utilità di vedere il desiderio della tua applicazione di non dormire; questo è fondamentale per lavorare senza problemi con il software di gestione dell'alimentazione di terze parti.
fonte
2011-12-11 00:57:14
C'è una [nuova Apple Q & A] (http://developer.apple.com/library/mac/#qa/qa1340/_index.html) su questo. –
@ Michael: E mi piacerebbe fare lo stesso. C'è un modo per modificare la domanda? – orome
Pubblicare una taglia aumenterà la visibilità della domanda e potrebbe richiedere più risposte. Fare clic sul collegamento "Avvia una taglia" su quella domanda e fornire la finestra di dialogo risultante con i motivi per cui si desidera una risposta più attuale. Aggiungi un commento se desideri fornire maggiori dettagli. –