in reply to TK Timed action

I don't really have a good grasp as to how to efficiently force the program to check every x seconds?
......
It turns out that $mw->after(1000, \&sub); works.. then just add that into the sub to repeat..

Hi, Tk::after is usually used for a one-shot delay. What you want is Tk::repeat. Try

my $repeater = $mw->repeat(1000, \&sub); .... $repeater->cancel; # when you want to stop it
and you will not need to repeatedly call Tk::after in your sub.

Here is a basic example:

#!/usr/bin/perl use Tk; use warnings; use strict; my $mw = MainWindow->new(title => "Timer"); my $elapsed_sec = 0; my $elapsed_sec_label = $mw->Label(-textvariable => \$elapsed_sec)->pa +ck(); my $repeater; # declare first so it can be accessed in the callback $mw->Button(-text => "reset", -command => sub { $elapsed_sec = 0; &repeater(); })->pack(); $mw->Button(-text => "exit", -command => sub { exit })->pack(); # start first run &repeater(); MainLoop; sub repeater{ #this is repeated every second, and you can put your is_playing here $repeater = $mw->repeat(1000 => sub { $elapsed_sec ++; if ($elapsed_sec > 4){ $repeater->cancel } } ); }

I'm not really a human, but I play one on earth.
Old Perl Programmer Haiku ................... flash japh