tclTask: Schedule and manage delayed tasks

tclAfterR Documentation

Schedule and manage delayed tasks

Description

Tcl allows fo scheduling execution of code on the next event loop or after a given time (after Tcl command). tclTaskXxx() functions use it to schedule execution of R code with much control from within R (central management of scheduled tasks, possibility to define redoable tasks, use of S3 objects to keep track of tasks information. The tclAfterXxx() functions are low-level access to the Tcl after command.

Usage

tclAfter(wait, fun)

tclAfterCancel(task)

tclAfterInfo(task = NULL)

## S3 method for class 'tclTask'
print(x, ...)

tclTaskSchedule(wait, expr, id = "task#", redo = FALSE)

tclTaskRun(id)

tclTaskGet(id = NULL, all = FALSE)

tclTaskChange(id, expr, wait, redo)

tclTaskDelete(id)

Arguments

wait

Time in ms to delay the task (take care: approximate value, depends on when event loops are triggered). Using a value lower or equal to zero, the task is scheduled on the next event loop.

fun

Name of the R function to run (you may not supply arguments to this function, otherwise it is not scheduled properly; take care of scoping, since a copy of the function will be run from within Tcl).

task

A Tcl task timer, or its name in Tcl (in the form of 'after#xxx').

x

A 'tclTask' object.

...

Further argument to the print() method.

expr

An expression to run after 'wait'.

id

The R identifier of the task to schedule, if this id contains ⁠#⁠, then, it is replaced by next available number, but you cannot schedule more than a thousand tasks with the same name (the system will give up well before, anyway). If NULL in tclTaskGet(), retrieve the list of all existing tasks.

redo

Should the task be rescheduled n times, indefinitely (redo = TRUE) or not (redo = FALSE, default, or a value <= 0).

all

If id = NULL, all = TRUE indicate to list all tasks, including hidden ones (with id starting with a dot).

Value

The tclAfterXxx() functions return a 'tclObj' with the result of the corresponding Tcl function. tclAfter() returns the created Tcl timer in this object. If 'task' does not exists, tclAfterInfo() returns NULL.

tclTaskGet() returns a 'tclTask' object, a list of such objects, or NULL if not found.

The four remaining tclTaskXxx() functions return invisibly TRUE if the process is done successfully, FALSE otherwise. tclTaskRun() forces running a task now, even if it is scheduled later.

Author(s)

Philippe Grosjean

See Also

tclFun(), base::addTaskCallback(), base::Sys.sleep()

Examples

## Not run: 
# These cannot be run by examples() but should be OK when pasted
# into an interactive R session with the tcltk package loaded

# Run just once, after 1 sec
test <- function () cat("==== Hello from Tcl! ====\n")
tclTaskSchedule(1000, test())
Sys.sleep(2)

# Run ten times a task with a specified id
test2 <- function () cat("==== Hello again from Tcl! ====\n")
tclTaskSchedule(1000, test2(), id = "test2", redo = 10)
Sys.sleep(1)

# Run a function with arguments (will be evaluated in global environment)
test3 <- function (txt) cat(txt, "\n")
msg <- "==== First message ===="
tclTaskSchedule(1000, test3(msg), id = "test3", redo = TRUE)
Sys.sleep(2)
msg <- "==== Second message ===="
Sys.sleep(2)

# Get info on pending tasks
tclTaskGet() # List all (non hidden) tasks
tclTaskGet("test2")
# List all active Tcl timers
tclAfterInfo()

# Change a task (run 'test3' only once more, after 60 sec)
tclTaskChange("test3", wait = 60000, redo = 1)
Sys.sleep(1)
# ... but don't wait so long and force running 'test3' right now
tclTaskRun("test3")

Sys.sleep(3)
# finally, delete all pending tasks
tclTaskDelete(NULL)

## End(Not run)

tcltk2 documentation built on June 8, 2025, 1:04 p.m.