home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  


14.5 Timers

Tk provides a lightweight timer mechanism that can call back a procedure after a specified delay (specified in milliseconds). To create one-shot timers, use the after method on any widget; for repeating timers, use repeat . In the following example, the button changes its label when pressed and resets its label after 300 milliseconds:

$button->configure (text => 'hello',
                    command => \&change_title));
sub change_title {
    my ($old_title) = $button->cget('text');
    $button->configure (text => 'Ouch'); 
    $button->after (300, 
                    sub {$button->configure(text => $old_title)});
}

We will use after extensively in Chapter 15 for animation.

Both after and repeat return timer objects. Because these mechanisms are quite efficient and lightweight (unlike using alarm() and SIGALRM ), you can have a large number of timers. To cancel a timer, use cancel :

$timer = $button->after(100, sub {print "foo"});
$timer->cancel();

Tk's time-out facility, unlike SIGALRM , is not preemptive. It requires that control return to the event loop before it can check if it is time for the next timer to fire. A long subroutine can delay the timed event.


Previous: 14.4 Geometry Management Advanced Perl Programming Next: 14.6 Event Bindings
14.4 Geometry Management Book Index 14.6 Event Bindings

Library Navigation Links

Copyright © 2001 O'Reilly & Associates. All rights reserved.