NAME¶
Tk::after - Execute a command after a time delay
SYNOPSIS¶
$widget->
after(
ms)
$id =
$widget->
after(
ms?,
callback?)
$id =
$widget->
repeat(
ms?,
callback?)
$widget->
afterCancel(
$id )
$id =
$widget->
afterIdle(
callback)
$widget->
afterInfo?(
$id )?
$id->
time(?
delay?)
DESCRIPTION¶
This method is used to delay execution of the program or to execute a callback
in background sometime in the future.
In perl/Tk
$widget->
after is implemented via the
class "Tk::After", and callbacks are associated with
$widget , and are automatically cancelled when the widget
is destroyed. An almost identical interface, but without automatic cancel, and
without repeat is provided via Tk::after method.
Internal Details¶
The internal Tk::After class has the following synopsis:
$id = Tk::After->new($widget, tid, $time, 'once', callback);
$id = Tk::After->new($widget, tid, $time, 'repeat', callback);
$id->cancel;
$id->time(?delay?);
$id is a Tk::After object, an array of 5 elements:
$widget is the parent widget reference.
tid is the internal timer id, a unique string.
$time is the string 'idle', representing an idle queue
timer, or a integer millisecond value.
once or
repeat specifies whether the timer is a one-time
after event, or a repeating
repeat event.
callback specifies a Perl/Tk Tk::Callback object.
Changing a repeat timer interval¶
It's posible to change a
repeat timer's delay value, or even cancel any
timer, using the
time method. If
delay is specified and
non-zero, a new timer delay is established. If
delay is zero the timer
event is canceled just as if
$id->
cancel were
invoked. In all cases the current millisecond timer delay is returned.
Note: the new timer delay will take effect on the
subsequent timer event
- this command will not cancel the pending timer event and re-issue it with
the new delay time.
- $widget->after(ms)
- The value ms must be an integer giving a time in
milliseconds. The command sleeps for ms milliseconds and then
returns. While the command is sleeping the application does not respond to
events.
- $widget->after(ms,callback)
- In this form the command returns immediately, but it
arranges for callback be executed ms milliseconds later as
an event handler. The callback will be executed exactly once, at the given
time. The command will be executed in context of
$widget. If an error occurs while executing the
delayed command then the Tk::Error mechanism is used to report the error.
The after command returns an identifier (an object in the perl/Tk
case) that can be used to cancel the delayed command using
afterCancel.
- $widget->repeat(ms,callback)
- In this form the command returns immediately, but it
arranges for callback be executed ms milliseconds later as
an event handler. After callback has executed it is re-scheduled,
to be executed in a futher ms, and so on until it is
cancelled.
- $widget->afterCancel($id)
- $id->cancel
- Cancels the execution of a delayed command that was
previously scheduled. $id indicates which command
should be canceled; it must have been the return value from a previous
after command. If the command given by $id has
already been executed (and is not scheduled to be executed again) then
afterCancel has no effect.
- $widget->afterCancel(callback)
- This form is not robust in perl/Tk - its use is
deprecated. This command should also cancel the execution of a delayed
command. The callback argument is compared with pending callbacks,
if a match is found, that callback is cancelled and will never be
executed; if no such callback is currently pending then the
afterCancel has no effect.
- $widget->afterIdle(callback)
- Arranges for callback to be evaluated later as an
idle callback. The script will be run exactly once, the next time the
event loop is entered and there are no events to process. The command
returns an identifier that can be used to cancel the delayed command using
afterCancel. If an error occurs while executing the script then the
Tk::Error mechanism is used to report the error.
- $widget->afterInfo?($id)?
- This command returns information about existing event
handlers. If no $id argument is supplied, the command
returns a list of the identifiers for all existing event handlers created
by the after and repeat commands for
$widget. If $id is supplied, it
specifies an existing handler; $id must have been the
return value from some previous call to after or repeat and
it must not have triggered yet or been cancelled. In this case the command
returns a list with three elements. The first element of the list is the
callback associated with $id, the second element is
either idle or the integer timer millisecond value to
indicate what kind of event handler it is, and the third is a string
once or repeat to differentiate an after from a
repeat event.
The
after(
ms) and
afterIdle forms of the command assume
that the application is event driven: the delayed commands will not be
executed unless the application enters the event loop. In applications that
are not normally event-driven, the event loop can be entered with the
vwait and
update commands.
SEE ALSO¶
Tk::Error Tk::callbacks
KEYWORDS¶
cancel, delay, idle callback, sleep, time