// // CogSemaphore.m // Cog // // Created by Vincent Spader on 8/2/05. // Copyright 2005 Vincent Spader. All rights reserved. // #import @implementation Semaphore - (id)init { self = [super init]; if(self) { semaphore_create(mach_task_self(), &semaphore, SYNC_POLICY_FIFO, 0); } return self; } - (void)signal { semaphore_signal_all(semaphore); } - (void)timedWait:(int)microseconds { mach_timespec_t timeout = { 0, microseconds * 1000UL }; semaphore_timedwait(semaphore, timeout); } - (void)wait { mach_timespec_t t = { 2.0, 0.0 }; // 2 second timeout semaphore_timedwait(semaphore, t); } - (void)waitIndefinitely { semaphore_wait(semaphore); } @end