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 один раз, вторая итерация этого цикла будет ждать сигнала).

  • Управление заголовком заголовка HTTP в iOS / OSX
  • Объекты SceneKit и COLLADA
  • Веб-инспектор Safari «Нет проверенных приложений», когда ipad подключен к программе mac book pro
  • Невозможно отправить приложение в iTunes connect: «Новые приложения и обновления приложений должны быть созданы с общедоступными (GM) версиями Xcode"
  • Xcode 8.1 говорит: «Попробуйте снова войти в систему или обратитесь в службу поддержки Apple, чтобы решить проблему с доступом к учетной записи», что мне делать?
  • Как получить конкретную область видео в Swift AVPlayer?
  • Добавить TICoreDataSync в проект ios / mac
  • Список установленных профилей для мобильных устройств
  • Почему существует так много ключей подписи iMessage в разделе секретного ключа Keychain?
  • Слияние папок с NSFileManager, перезапись только существующих файлов
  • Как избежать загрузки данных приложений с помощью xcode
  • Давайте будем гением компьютера.