add jtk.timer module
This commit is contained in:
parent
977b7cbf37
commit
a811a743b8
@ -3,4 +3,5 @@ module jtk;
|
|||||||
public import jtk.event;
|
public import jtk.event;
|
||||||
public import jtk.init;
|
public import jtk.init;
|
||||||
public import jtk.time;
|
public import jtk.time;
|
||||||
|
public import jtk.timer;
|
||||||
public import jtk.window;
|
public import jtk.window;
|
||||||
|
69
src/jtk/timer.d
Normal file
69
src/jtk/timer.d
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
module jtk.timer;
|
||||||
|
|
||||||
|
import jtk.time;
|
||||||
|
import std.algorithm;
|
||||||
|
|
||||||
|
class Timer
|
||||||
|
{
|
||||||
|
private static Timer[Timer] timers;
|
||||||
|
|
||||||
|
ulong next;
|
||||||
|
|
||||||
|
ulong interval;
|
||||||
|
|
||||||
|
void * user;
|
||||||
|
|
||||||
|
this(ulong delay, ulong interval, void * user)
|
||||||
|
{
|
||||||
|
ulong current_time = ms_time();
|
||||||
|
this.next = current_time + delay;
|
||||||
|
this.interval = interval;
|
||||||
|
this.user = user;
|
||||||
|
timers[this] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void remove()
|
||||||
|
{
|
||||||
|
timers.remove(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void service()
|
||||||
|
{
|
||||||
|
if (this.interval == 0u)
|
||||||
|
{
|
||||||
|
remove();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.next += this.interval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static Timer get_expired_timer()
|
||||||
|
{
|
||||||
|
ulong current_time = ms_time();
|
||||||
|
foreach (Timer timer; timers)
|
||||||
|
{
|
||||||
|
if (timer.next <= current_time)
|
||||||
|
{
|
||||||
|
return timer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ulong time_to_next_timer_expiration()
|
||||||
|
{
|
||||||
|
ulong rv = cast(ulong)-1;
|
||||||
|
ulong current_time = ms_time();
|
||||||
|
foreach (Timer timer; timers)
|
||||||
|
{
|
||||||
|
if (timer.next <= current_time)
|
||||||
|
{
|
||||||
|
return 0u;
|
||||||
|
}
|
||||||
|
rv = min(rv, timer.next - current_time);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user