X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fthreads.c;h=a39fb5e453f6368106903e40f90c8081225a7304;hb=7dcbae6762b50bdd450559ca455f2374a09f1df9;hp=1e7d0c3fa61e89b072ad0d2b51ebf0b2e1d5cc3c;hpb=6bcb63ea0505129d32b249772b554b0848bb5612;p=tpg%2Facess2.git diff --git a/AcessNative/acesskernel_src/threads.c b/AcessNative/acesskernel_src/threads.c index 1e7d0c3f..a39fb5e4 100644 --- a/AcessNative/acesskernel_src/threads.c +++ b/AcessNative/acesskernel_src/threads.c @@ -70,6 +70,9 @@ typedef struct sThread tProcess *Process; + Uint32 Events, WaitMask; + SDL_sem *EventSem; + } tThread; // === PROTOTYPES === @@ -359,3 +362,23 @@ int Semaphore_Signal(tSemaphore *Sem, int AmmountToAdd) return AmmountToAdd; } +Uint32 Threads_WaitEvents(Uint32 Mask) +{ + Uint32 rv; + gpCurrentThread->WaitMask = Mask; + if( !(gpCurrentThread->Events & Mask) ) + SDL_SemWait( gpCurrentThread->EventSem ); + rv = gpCurrentThread->Events & Mask; + gpCurrentThread->Events &= ~Mask; + gpCurrentThread->WaitMask = -1; + return rv; +} + +void Threads_PostEvent(tThread *Thread, Uint32 Events) +{ + Thread->Events |= Events; + + if( Thread->WaitMask & Events ) + SDL_SemPost( gpCurrentThread->EventSem ); +} +