2011-12-10 7 views
10

संभव डुप्लिकेट:
How to programmatically prevent a Mac from going to sleep?ओएस एक्स पर नींद को रोकने का सही तरीका क्या है?

नींद को रोकने, जबकि एक आवेदन या प्रक्रिया चल रहा है के लिए ओएस एक्स (10.7) के वर्तमान संस्करण पर सही विधि क्या है?

विशेष रूप से, IOCancelPowerChange अभी भी (या यह कभी किया है) इस उद्देश्य को पूरा करते हैं? मैं kIOMessageCanSystemSleep के जवाब में IOCancelPowerChange पर कॉल करता हूं, लेकिन यह चाल नहीं करता है।


मूलतः same question इस एक के पहले भाग के रूप में पहले से पूछा गया है, लेकिन documentation यह बताते हैं के लिए काफी पुराना है और जवाब स्वीकार किए जाते हैं कभी नहीं किया गया था।

+2

इस पर एक [नया ऐप्पल क्यू एंड ए] (http://developer.apple.com/library/mac/#qa/qa1340/_index.html) है। –

+0

@ माइकल: और मैं वही करना चाहता हूं। क्या कोई तरीका है कि मैं सवाल में संशोधन कर सकता हूं? – orome

+0

एक बक्षीस पोस्ट करना उस प्रश्न की दृश्यता को बढ़ाएगा, और अधिक उत्तर दे सकता है। उस प्रश्न पर 'एक बाउंटी' लिंक पर क्लिक करें, और परिणामस्वरूप संवाद को अधिक मौजूदा उत्तर देने के कारणों के साथ प्रदान करें। यदि आप अधिक जानकारी प्रदान करना चाहते हैं तो एक टिप्पणी जोड़ें। –

उत्तर

9

IOCancelPowerChange काम करना जारी रखता है लेकिन केवल निष्क्रिय नींद के लिए; यह खोजक की नींद मेनू आइटम, प्रोग्रामेटिक रूप से अनुरोधित, या पावर बटन के धक्का से ट्रिगर की नींद के लिए काम नहीं करेगा।

ऐप्पल का 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. 
} 

नोट है कि आप केवल निष्क्रिय समय नींद बंद कर सकते हैं, तो उपयोगकर्ता से शुरू हो रहा सो नहीं।

मैक ओएस एक्स 10.6 और बाद में समर्थित अनुप्रयोगों के लिए, नए IOPMAssertion फ़ंक्शन के परिवार का उपयोग करें। ये फ़ंक्शन अन्य एप्लिकेशन और उपयोगिताओं को आपके आवेदन की इच्छा को सोने के लिए देखने की अनुमति देते हैं; तीसरे पक्ष के पावर प्रबंधन सॉफ्टवेयर के साथ निर्बाध रूप से काम करना महत्वपूर्ण है।

1

आप सोने से प्रदर्शन को रोकने के लिए हर 30 सेकंड में अद्यतन सिस्टम एक्टिविटी (ओवरलैक्ट) को कॉल कर सकते हैं।

+4

कृपया इस चाल से बचें। इसके बजाय क्यू एंड ए 1340 में प्रलेखित ऐप्पल द्वारा समर्थित तकनीकों का उपयोग करें। –

+2

कैसे आते हैं? ऐप्पल इस विधि को एक दस्तावेज़ में भी सलाह देता है। – lbrndnr

+2

क्यू एंड ए 1340 में ऐप्पल की नवीनतम सिफारिश नए IOPMAssertionCreateWithName इंटरफ़ेस का उपयोग करना है। यह इंटरफ़ेस आपके एप्लिकेशन को प्रत्येक 30 सेकंड में CPU चक्र की मांग करने की आवश्यकता से बचाता है, यह मैक ओएस एक्स के लिए एक सरल तरीका प्रदान करता है - और अन्य टूल्स - दावे की जांच करने के लिए, और बेहतर आपके अनुप्रयोगों को वास्तविक इरादे से इंगित करता है। प्रत्येक 30 सेकंड में उपयोगकर्ता गतिविधि की नकल करने के लिए सिस्टम को बताकर एक चाल है जो काम करती है लेकिन अब इसे औपचारिक एपीआई द्वारा हटा दिया गया है। –

संबंधित मुद्दे