Updated docs
[sdlgit/SDL-Site.git] / pages / SDL-Time.html-inc
CommitLineData
cf23a5da 1<div class="pod">
2<!-- INDEX START -->
3<h3 id="TOP">Index</h3>
4
5<ul><li><a href="#NAME">NAME</a></li>
980e45b1 6<li><a href="#CATEGORY">CATEGORY</a></li>
cf23a5da 7<li><a href="#SYNOPSIS">SYNOPSIS</a></li>
8<li><a href="#METHODS">METHODS</a>
801213bd 9<ul><li><a href="#add_timer">add_timer</a></li>
10<li><a href="#remove_timer">remove_timer</a>
cf23a5da 11</li>
12</ul>
13</li>
14</ul><hr />
15<!-- INDEX END -->
16
17<h1 id="NAME">NAME</h1><p><a href="#TOP" class="toplink">Top</a></p>
18<div id="NAME_CONTENT">
05c66c33 19<p>SDL::Time - An SDL Perl extension for managing timers</p>
cf23a5da 20
980e45b1 21</div>
22<h1 id="CATEGORY">CATEGORY</h1><p><a href="#TOP" class="toplink">Top</a></p>
23<div id="CATEGORY_CONTENT">
24<p>Core</p>
cf23a5da 25
26</div>
27<h1 id="SYNOPSIS">SYNOPSIS</h1><p><a href="#TOP" class="toplink">Top</a></p>
28<div id="SYNOPSIS_CONTENT">
801213bd 29<pre> use warnings;
30 use strict;
31
32 use threads;
05c66c33 33 use threads::shared;
cf23a5da 34
05c66c33 35 use SDL::Time;
cf23a5da 36
05c66c33 37 package foo;
cf23a5da 38
801213bd 39 use SDL ':all';
40
05c66c33 41 SDL::init(SDL_INIT_TIMER);
cf23a5da 42
05c66c33 43 my $tick :shared = 0;
44 sub ticker { $tick++; warn $tick; return 100; }
cf23a5da 45
05c66c33 46 package main;
cf23a5da 47
05c66c33 48 my $id = SDL::Time::add_timer(100, 'foo::ticker');
cf23a5da 49
05c66c33 50 sleep(2);
cf23a5da 51
05c66c33 52 SDL::Time::remove_timer($id);
cf23a5da 53
54</pre>
55
56</div>
57<h1 id="METHODS">METHODS</h1><p><a href="#TOP" class="toplink">Top</a></p>
58<div id="METHODS_CONTENT">
59
cf23a5da 60</div>
801213bd 61<h2 id="add_timer">add_timer</h2>
62<div id="add_timer_CONTENT">
63<pre> my $id = SDL::Timer::add_timer( $ms_interval, $callback );
64
65</pre>
66<p>This runs in a separate thread and a cloned Perl thread.
67<code>threads</code> and <code>threads::shared</code> must be used to share any variables the timer uses.</p>
68<p>The <code>$callback</code> function, specified with a string of the function's name, will be called after the milliseconds of <code>$interval</code> have elapsed.
05c66c33 69The actual delay may be longer than specified depending on the underlying OS.
801213bd 70The callback function is passed the current timer interval as well as the <code>$interval</code> parameter and should return the next timer interval.
05c66c33 71If the return value from the callback is 0, the timer is cancelled; otherwise, the timer will continue to run.</p>
72<p>The timer callback function may run in a different thread to your main program, so it shouldn't call any functions from within itself.
73You may call SDL::push_event, however.</p>
74<p><code>SDL::Time::add_timer</code> returns the identifier value of the generated timer or undef on error.</p>
75<p><strong>Note:</strong> You must initialize (<code>SDL::init</code>) the timer subsystem to use this function.</p>
cf23a5da 76
77</div>
801213bd 78<h2 id="remove_timer">remove_timer</h2>
79<div id="remove_timer_CONTENT">
80<pre> SDL::Timer::remove_timer( $id );
81
82</pre>
83<p>The other way to cancel a timer is to use <code>SDL::Time::remove_timer</code> on the <code>$id</code> of a timer.
84This ID is the return value of the <code>SDL::Time::add_timer</code> function.</p>
05c66c33 85<p><code>SDL::Time::remove_timer</code> returns <code>0</code> on success or <code>-1</code> on error.</p>
cf23a5da 86
87</div>
88</div>