add event thread and jtk.event.check_event()

This commit is contained in:
Josh Holtrop 2020-07-08 12:52:32 -04:00
parent 0963b80234
commit 303d387c20
2 changed files with 47 additions and 3 deletions

View File

@ -1,5 +1,10 @@
module jtk.event; module jtk.event;
import core.thread;
import core.sync.mutex;
import std.container.dlist;
import jtk.timer;
struct Event struct Event
{ {
enum Type : ubyte enum Type : ubyte
@ -26,9 +31,7 @@ struct Event
struct TimerEvent struct TimerEvent
{ {
uint timer_id; Timer timer;
void * user1;
void * user2;
}; };
struct WindowResizeEvent struct WindowResizeEvent
@ -46,3 +49,42 @@ struct Event
WindowResizeEvent resize_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();
}

View File

@ -1,5 +1,6 @@
module jtk.init; module jtk.init;
static import jtk.event;
static import jtk.timer; static import jtk.timer;
private extern(C) bool jtk_init(); private extern(C) bool jtk_init();
@ -11,6 +12,7 @@ bool init()
return false; return false;
} }
jtk.event.event_init();
jtk.timer.Timer.timer_init(); jtk.timer.Timer.timer_init();
return true; return true;