---
name: "SDL::Time"
section: "3pm"
platform: "linux"
package: "libsdl-perl"
version: "2.548-5+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/SDL::Time"
---

# SDL::Time(3pm)

An SDL Perl extension for managing timers

## NAME

SDL::Time - An SDL Perl extension for managing timers

## CATEGORY

Core

## SYNOPSIS

```
 use warnings;
 use strict;

 use threads;
 use threads::shared;
 use SDL::Time;
 package foo;
 use SDL ':all';
 SDL::init(SDL_INIT_TIMER);
 my $tick :shared = 0;
 sub ticker { $tick++; warn $tick; return 100; }
 package main;
 my $id = SDL::Time::add_timer(100, 'foo::ticker');
 sleep(2);
 SDL::Time::remove_timer($id);
```

## METHODS

### add\_timer

```
 my $id = SDL::Timer::add_timer( $ms_interval, $callback );
```

This runs in a separate thread and a cloned Perl thread. `"threads"` and `"threads::shared"` must be used to share any variables the timer uses.

The `$callback` function, specified with a string of the function's name, will be called after the milliseconds of `$interval` have elapsed. The actual delay may be longer than specified depending on the underlying OS. The callback function is passed the current timer interval as well as the `$interval` parameter and should return the next timer interval. If the return value from the callback is 0, the timer is cancelled; otherwise, the timer will continue to run.

The timer callback function may run in a different thread to your main program, so it shouldn't call any functions from within itself. You may call SDL::push\_event, however.

`"SDL::Time::add_timer"` returns the identifier value of the generated timer or undef on error.

**Note:** You must initialize (`"SDL::init"`) the timer subsystem to use this function.

### remove\_timer

```
 SDL::Timer::remove_timer( $id );
```

The other way to cancel a timer is to use `"SDL::Time::remove_timer"` on the `$id` of a timer. This ID is the return value of the `"SDL::Time::add_timer"` function.

`"SDL::Time::remove_timer"` returns `0` on success or `-1` on error.

## AUTHORS

See "AUTHORS" in SDL.
