2011-12-10 3 views
10

가능한 중복 :
How to programmatically prevent a Mac from going to sleep?OS X에서 잠자기를 방지하는 올바른 방법은 무엇입니까?

애플리케이션 또는 프로세스가 실행되는 동안 슬립을 방지하는 OS X (10.7)의 현재 버전에 올바른 방법은 무엇인가?

특히 IOCancelPowerChange은 아직도이 목적을 달성하고 있습니까? kIOMessageCanSystemSleep에 대한 응답으로 IOCancelPowerChange으로 전화를 걸지 만 그 트릭을 수행하지는 않습니다.


기본적으로

이 하나의 첫 번째 부분으로 same question

전에 요청되었지만, documentation 그것은에 꽤 오래 지적 대답은 허용되지 않았다.

+2

여기에 [새로운 Apple Q & A] (http://developer.apple.com/library/mac/#qa/qa1340/_index.html)가 있습니다. –

+0

@ 마이클 : 나는 그와 똑같이하고 싶습니다. 내가 그 질문을 수정할 수있는 방법이 있습니까? – orome

+0

현상금을 게시하면 해당 질문의 가시성이 높아져 더 많은 답변을 요구할 수 있습니다. 그 질문에 대한'현상금 시작'링크를 클릭하고 결과 대화 상자에 최신 대답을 원한 이유를 제공하십시오. 자세한 내용을 제공하려면 설명을 추가하십시오. –

답변

9

IOCancelPowerChange은 계속 작동하지만 유휴 트리거 모드에서만 작동합니다. 파인더의 수면 메뉴 항목, 프로그래밍 방식으로 요청한 항목 또는 전원 단추를 눌러 트리거되는 절전 모드에서는 작동하지 않습니다.

Apple의 Q&A1340은 "컴퓨터가 잠자기 또는 잠자기에서 깨어날 때 내 응용 프로그램에 어떻게 알릴 수 있습니까? 잠을 어떻게 방지합니까?"라는 질문에 대답합니다.

목록 Q&A1340 2 :

#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. 
} 

참고 만 유휴 시간의 수면을 중지 할 수 있습니다, 사용자가 트리거 잠을 잘.

Mac OS X 10.6 이상을 지원하는 응용 프로그램의 경우 새로운 IOPMAssertion 제품군을 사용하십시오. 이 함수는 다른 응용 프로그램과 유틸리티가 응용 프로그램의 절전 모드를 보지 못하도록합니다. 이는 타사 전원 관리 소프트웨어와 원활하게 작업하는 데 중요합니다.

1

30 분마다 updatesystemActivity (OverallAct)를 호출하여 디스플레이가 잠자기 상태가되지 않도록 할 수 있습니다.

+4

이 트릭을 피하십시오. 대신 Q & A1340에 문서화 된 Apple 승인 기술을 사용하십시오. –

+2

어째서? Apple은 문서에서이 방법에 대해서도 조언합니다. – lbrndnr

+2

Q & A1340에서 Apple의 최신 권장 사항은 새로운 IOPMAssertionCreateWithName 인터페이스를 사용하는 것입니다. 이 인터페이스는 30 초마다 CPU주기를 요구해야하는 응용 프로그램을 피할 수 있으며 Mac OS X 및 기타 도구에서 어설 션을 확인하는 간단한 방법을 제공하며 응용 프로그램의 실제 의도를보다 잘 나타냅니다. 30 초마다 사용자 활동을 모방하도록 시스템을 알려주는 것이 효과적이지만 공식적인 API로 대체되었습니다. –

관련 문제