diff options
Diffstat (limited to 'uisimulator/win32/kernel.c')
-rw-r--r-- | uisimulator/win32/kernel.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/uisimulator/win32/kernel.c b/uisimulator/win32/kernel.c index 150b8e42cc..567ed9ee39 100644 --- a/uisimulator/win32/kernel.c +++ b/uisimulator/win32/kernel.c | |||
@@ -56,6 +56,25 @@ void queue_wait(struct event_queue *q, struct event *ev) | |||
56 | *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; | 56 | *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; |
57 | } | 57 | } |
58 | 58 | ||
59 | void queue_wait_w_tmo(struct event_queue *q, struct event *ev, int ticks) | ||
60 | { | ||
61 | unsigned int timeout = current_tick + ticks; | ||
62 | |||
63 | while(q->read == q->write && TIME_BEFORE( current_tick, timeout )) | ||
64 | { | ||
65 | sleep(1); | ||
66 | } | ||
67 | |||
68 | if(q->read != q->write) | ||
69 | { | ||
70 | *ev = q->events[(q->read++) & QUEUE_LENGTH_MASK]; | ||
71 | } | ||
72 | else | ||
73 | { | ||
74 | ev->id = SYS_TIMEOUT; | ||
75 | } | ||
76 | } | ||
77 | |||
59 | void queue_post(struct event_queue *q, int id, void *data) | 78 | void queue_post(struct event_queue *q, int id, void *data) |
60 | { | 79 | { |
61 | int wr; | 80 | int wr; |