MacOS idle time in gtkidle.c

Stephen More stephen.more at gmail.com
Thu Jun 28 13:51:20 EDT 2007


Thanks. That code is much simpler, but I am not getting the results I expected:

After 10 seconds of idletime, CGSSecondsSinceLastInputEvent is returning 2.
After 60 seconds of idletime, CGSSecondsSinceLastInputEvent is returning 13.
After 120 seconds of idletime, CGSSecondsSinceLastInputEvent is returning 28.

Is this normal ?

-Steve

On 6/28/07, Evan Schoenberg <evan.s at dreskin.net> wrote:
> I created a dynamic library on Mac OS X ( 10.3.9 ) that displays the idle
> time.
> It is a subset of gtkidle.c
>
> # ifdef HAVE_IOKIT
>    ...
> # else
>
> I will ssh into the Mac and execute this code, and it seems to respond
> back with a cached version of idle time. I execute it over and over
> again the the idle time does not change.
>
> The command "ioreg -c IOHIDSystem" seems to refresh the cache.
>
> I am not a Mac API expert...is there and API that can be called
> instead of adding this hack ?
> system( "ioreg -c IOHIDSystem > /dev/null" );
>
>
> From Adium:
>
>
> extern CFTimeInterval CGSSecondsSinceLastInputEvent(unsigned long evType);
>
> /*!
>  * @brief Returns the current machine idle time
>  *
>  * Returns the current number of seconds the machine has been idle.  The
> machine is idle when there are no input
>  * events from the user (such as mouse movement or keyboard input) or when
> the screen saver is active.
>  * In addition to this method, the status controller sends out notifications
> when the machine becomes idle,
>  * stays idle, and returns to an active state.
>  */
> - (CFTimeInterval)currentMachineIdle
> {
>  CFTimeInterval idleTime;
>
>  /* CGSSecondsSinceLastInputEvent is a private function available in 10.2
> and later. Note that
> CGEventSourceSecondsSinceLastEventType()
>  * should work as of 10.4 but doesn't return a sensical value.
>  */
>  idleTime = CGSSecondsSinceLastInputEvent(-1);
>
>
>  /* On MDD Powermacs, the above function will return a large value when the
> machine is active (perhaps a -1?).
>  * Here we check for that value and correctly return a 0 idle time.
>  */
>  if (idleTime >= 18446744000.0) idleTime = 0.0; //18446744073.0 is the
> lowest I've seen on my MDD -ai
>
>
>     return idleTime;
> }
>
> -Evan
>




More information about the Devel mailing list