iOS / OSX эквивалент SetEvent () и WaitForSingleObject ()?
У меня есть кросс-платформенное приложение, которое основано на Windows, iOS и OSX.
В моем приложении Windows я создаю объект Event с исходным состоянием unsignalled. У меня есть поток, который ожидает, что это событие будет сигнализировано, вызвав WaitForSingleObject (). WaitForSingleObject () блокирует обработку потока до тех пор, пока другой поток не вызовет SetEvent ().
Как достичь такого же поведения с GCD dispatch_semaphore_wait () и dispatch_semaphore_signal ()?
- Swift - введите дату из года
- Получить строковое представление id в Objective-C
- React Native 0.47.1: Горячая перезагрузка не отражает изменения кода в MacOS
- файл был создан для i386, который не связан с архитектурой (x86_64) при компиляции OpenCV2.2 для iOS 4.2 на Mac OSX 10.6
- Xcode - можно ли отлаживать сбои в процессе Live Rendering Interface Builder (IBDesignable)?
Я пробовал следующее:
Детский поток:
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 );
- Обратный NSMutableArray
- Является ли OS X SecRandomCopyBytes fork безопасным?
- Переопределение свойств NSOperation (isExecuting / isFinished)
- Удаление приложения из устройства iOS через командную строку
- TestFlight desktop app v1.0 не работает на OSX Yosemite v10.10?
- Интеграция с приводом Google в iOS, дающая ошибку при вызове вставки
- Objective-C: Правильный способ передачи ссылки свойства в вызов метода
- Я не могу поймать «Нет места на устройстве» при использовании функции NSFileHandle writedata
Это в основном правильно, хотя вы обычно dispatch_semaphore_create(0)
(что означает, что dispatch_semaphore_wait
будет ждать, пока он получит dispatch_semaphore_signal
, т. Е. Это «объект с начальным состоянием unsignalled»). Если вы используете 1
, первый вызов dispatch_semaphore_wait
будет выполняться немедленно, а не фактически ожидать какого-либо сигнала (хотя после вызова BigSoundBufferUpdate
один раз, вторая итерация этого цикла будет ждать сигнала).