X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Facesskernel_src%2Fthreads.c;h=a39fb5e453f6368106903e40f90c8081225a7304;hb=5240c280222eb76d29c2eaecaaadcbac01af3a9c;hp=1e7d0c3fa61e89b072ad0d2b51ebf0b2e1d5cc3c;hpb=5820336c4ed8897316d3d2cbd2c0f1b6f204f9a8;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 ); +} +