Not sure if it was mentioned, but did you look at the /var/log/DiagnosticMessages log, it should have all the sleep activity messages. Tony Romano
On 3/16/11 11:36 AM, "Michael Nickerson" <darkshado...@mac.com> wrote: > >On Mar 16, 2011, at 8:37 AM, Matt Gough wrote: > >> I've just been adding code to support NSWorkspaceWillSleepNotification. >>Having lowered my Computer sleep time right down and left the Mac >>untouched for several minutes, my code never fires and the Mac doesn't >>actually go to sleep. Even without my app running and leaving the Mac >>for several hours I notice that it still won't sleep. >> >> So it seems that something else is preventing idle sleep, but I've no >>idea how to find the culprit. Is there some defaults setting I can use >>that will log what the OS wants to do at sleep time and what is blocking >>it? >> >> > >I don't know of a way to log what might be blocking it, but I ran some >tests a while back that showed the system has to be idle for 10 minutes >before it will sleep. Or, at least the disk has to be idle for 10 >minutes, otherwise sleep is deferred. I ran into this with one of my >applications that is long running. It (can) access the disk frequently >to open and read files. It turned out that was causing my Mac not to >sleep - definitely not something I wanted to happen. > >What I ended up doing was writing a method that fires via a timer every >minute, and checks the sleep time - if I'm within 10 minutes of it, I >stop my application from reading anymore. This stopped the problem, so >far as my own application was concerned, though as others have pointed >out there's plenty of other things that can keep the system from sleeping >that you might not have control of. > >So, here's a short version of the code I'm using to do this (typed in >Mail): > >#import <IOKit/pwr_mgt/IOPMLib.h> >#import <IOKit/pwr_mgt/IOPM.h> > >- (void)checkIdleTime:(NSTimer *)timer >{ > unsigned long mins = 0, systemIdleMinutes = 0; > CFTimeInterval idleSeconds = CGEventSourceSecondsSinceLastEventType( >kCGEventSourceStateCombinedSessionState, kCGAnyInputEventType ); > static CFTimeInterval lastSeconds = 0.0; > > systemIdleMinutes = lrint(idleSeconds / 60.0); /* Gives minutes of >inactivity */ > > if ( lastSeconds > idleSeconds ) { > /* User activity has occurred since last check, if you disabled >anything you can re-enable it here. */ > } > > lastSeconds = idleSeconds; > > /* No need to check this if the system isn't idle. */ > if ( systemIdleMinutes ) { > mach_port_t master_device_port; > io_connect_t fb = 0; > kern_return_t kr = kIOReturnSuccess; > IOReturn err = kIOReturnSuccess; > > kr = IOMasterPort( bootstrap_port, &master_device_port ); > if ( kr == kIOReturnSuccess ) { > fb = IOPMFindPowerManagement( master_device_port ); > if ( fb ) { > err = IOPMGetAggressiveness( fb, kPMMinutesToSleep, &mins >); > if ( (err == kIOReturnSuccess) && (mins > 0) && ((mins - >systemIdleMinutes) <= 10) ) { > /* Do whatever you want to notify your app it should >stop disk access here */ > } > /* If you want to find out how long until the screen >dims, you can do the same as above but use kPMMinutesToDim instead. */ > IOServiceClose( fb ); > } > } > } >} > > >Do note one limitation of this as is: if the system is set to sleep in 10 >minutes or less, it will fire the condition as soon as the timer is hit >and there has been no user activity for at least a minute. This is >something I've been meaning to look into but haven't as yet. > > >-------------------------------------- >Darkshadow >(aka Michael Nickerson) >http://www.nightproductions.net > > >_______________________________________________ > >Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > >Please do not post admin requests or moderator comments to the list. >Contact the moderators at cocoa-dev-admins(at)lists.apple.com > >Help/Unsubscribe/Update your Subscription: >http://lists.apple.com/mailman/options/cocoa-dev/tonyrom%40hotmail.com > >This email sent to tony...@hotmail.com > _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com