I had a similar problem with a TK GUI app I wrote. I found using alarm to be the best solution as threads are great however sending and receiving data can get quite complex pretty quick.
try
my $timer_start = $mw->after(1000 => \&yoursub);
$mw->afterCancel($timer_start);