add event thread and jtk.event.check_event()
This commit is contained in:
parent
0963b80234
commit
303d387c20
@ -1,5 +1,10 @@
|
||||
module jtk.event;
|
||||
|
||||
import core.thread;
|
||||
import core.sync.mutex;
|
||||
import std.container.dlist;
|
||||
import jtk.timer;
|
||||
|
||||
struct Event
|
||||
{
|
||||
enum Type : ubyte
|
||||
@ -26,9 +31,7 @@ struct Event
|
||||
|
||||
struct TimerEvent
|
||||
{
|
||||
uint timer_id;
|
||||
void * user1;
|
||||
void * user2;
|
||||
Timer timer;
|
||||
};
|
||||
|
||||
struct WindowResizeEvent
|
||||
@ -46,3 +49,42 @@ struct Event
|
||||
WindowResizeEvent resize_event;
|
||||
};
|
||||
}
|
||||
|
||||
private extern(C) void jtk_wait_event(Event * event, ulong time_to_wait);
|
||||
|
||||
private __gshared DList!(Event *) * event_list;
|
||||
private __gshared Mutex event_list_mutex;
|
||||
|
||||
Event * check_event()
|
||||
{
|
||||
Event * rv = null;
|
||||
event_list_mutex.lock_nothrow();
|
||||
if (!event_list.empty)
|
||||
{
|
||||
rv = event_list.front;
|
||||
event_list.removeFront();
|
||||
}
|
||||
event_list_mutex.unlock_nothrow();
|
||||
return rv;
|
||||
}
|
||||
|
||||
private void event_thread()
|
||||
{
|
||||
for (;;)
|
||||
{
|
||||
Event * event = new Event;
|
||||
ulong time_until_next_timer_expiry =
|
||||
jtk.timer.Timer.time_to_next_timer_expiration();
|
||||
jtk_wait_event(event, time_until_next_timer_expiry);
|
||||
event_list_mutex.lock_nothrow();
|
||||
event_list.insertBack(event);
|
||||
event_list_mutex.unlock_nothrow();
|
||||
}
|
||||
}
|
||||
|
||||
package void event_init()
|
||||
{
|
||||
event_list = new DList!(Event *);
|
||||
event_list_mutex = new Mutex;
|
||||
new Thread(&event_thread).start();
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
module jtk.init;
|
||||
|
||||
static import jtk.event;
|
||||
static import jtk.timer;
|
||||
|
||||
private extern(C) bool jtk_init();
|
||||
@ -11,6 +12,7 @@ bool init()
|
||||
return false;
|
||||
}
|
||||
|
||||
jtk.event.event_init();
|
||||
jtk.timer.Timer.timer_init();
|
||||
|
||||
return true;
|
||||
|
Loading…
x
Reference in New Issue
Block a user