iOS / OSX эквивалент SetEvent () и WaitForSingleObject ()?

У меня есть кросс-платформенное приложение, которое основано на Windows, iOS и OSX.

В моем приложении Windows я создаю объект Event с исходным состоянием unsignalled. У меня есть поток, который ожидает, что это событие будет сигнализировано, вызвав WaitForSingleObject (). WaitForSingleObject () блокирует обработку потока до тех пор, пока другой поток не вызовет SetEvent ().

Как достичь такого же поведения с GCD dispatch_semaphore_wait () и dispatch_semaphore_signal ()?

Я пробовал следующее:

Детский поток:

void *UpdateThread( void *pParams ) { for( ;; ) { // Decrease the semaphore count, similar to sem_wait() dispatch_semaphore_wait( g_hEvtNeedMore, DISPATCH_TIME_FOREVER ); BigSoundBufferUpdate(); } } // SetEvent() - Windows equivalent void SetEvent( dispatch_semaphore_t sem ) { // Increase semaphore count - similar to sem_post() dispatch_semaphore_signal( sem ); } 

Основная тема:

 g_hEvtNeedMore = dispatch_semaphore_create( 1 ); // Not sure if initial value should be 0 or 1 pthread_create( &hUpdateThread, NULL, UpdateThread, NULL ); ... // Tell the child thread we want more data.. SetEvent( g_hEvtNeedMore ); 

Это в основном правильно, хотя вы обычно dispatch_semaphore_create(0) (что означает, что dispatch_semaphore_wait будет ждать, пока он получит dispatch_semaphore_signal , т. Е. Это «объект с начальным состоянием unsignalled»). Если вы используете 1 , первый вызов dispatch_semaphore_wait будет выполняться немедленно, а не фактически ожидать какого-либо сигнала (хотя после вызова BigSoundBufferUpdate один раз, вторая итерация этого цикла будет ждать сигнала).

  • Можно ли зарегистрироваться для уведомлений Push Push для CKS без необходимости спрашивать пользователя?
  • Xcode загружается в объекты OS X вместо объектов iOS
  • Боль в Xcode, подсветка синтаксиса
  • Отключение рук между устройствами iOS и Mac не работает
  • Как создать объект, который зависит от себя в функции init?
  • Ошибка проверки Podspec - Шаблоны файлов: спецификация пуста
  • Создайте / запустите проект iOS Xcode с терминала
  • Swift: как получить значение из AutoreleasingUnsafePointer <NSString?> Из NSScanner?
  • Почему мы должны использовать uppercaseStringWithLocale для NSString для получения правильной строки в верхнем регистре?
  • contentize и contentOffset в представлении NSScroll
  • Понимание поворотов CATransform3D вокруг всех трех осей
  • Давайте будем гением компьютера.