IOCancelPowerChange
sigue funcionando, pero solo para el sueño desencadenado inactivo; no funcionará para el sueño activado por el elemento del menú de reposo del Finder, solicitado por programación, o presionando el botón de encendido.
Q&A1340 de Apple responde a la pregunta "P: ¿Cómo se puede avisar a mi aplicación cuando la computadora se va a dormir o cuando se despierta? ¿Cómo evito dormir?"
Listado 2 de 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.
}
Tenga en cuenta que sólo se puede detener el tiempo de inactividad del sueño, el sueño no se desencadena por el usuario.
Para las aplicaciones compatibles con Mac OS X 10.6 y posterior, utilice la nueva familia de funciones IOPMAssertion. Estas funciones permiten que otras aplicaciones y utilidades vean el deseo de su aplicación de no dormir; esto es fundamental para trabajar a la perfección con el software de administración de energía de terceros.
Hay un [nuevo Q & A de Apple] (http://developer.apple.com/library/mac/#qa/qa1340/_index.html) sobre esto. –
@Michael: Y me gustaría hacer lo mismo. ¿Hay alguna manera de enmendar la pregunta? – orome
Publicar una recompensa aumentará la visibilidad de la pregunta y puede generar más respuestas. Haga clic en el enlace 'start a bounty' en esa pregunta y proporcione el cuadro de diálogo resultante con sus razones para querer una respuesta más actual. Agregue un comentario si desea proporcionar más detalles. –