我有一個跨平臺的應用程序,建立在Windows,iOS和OSX上。iOS/OSX等價的SetEvent()和WaitForSingleObject()?
在我的Windows應用程序中,我創建了一個具有未標記初始狀態的Event對象。我有一個線程,等待這個事件通過調用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);
與手頭上的問題無關,但我假設您試圖最大限度地提高跨代碼庫的跨平臺兼容性,值得注意的是,如果您避免創建一般情況下編寫iOS/MacOS上的多線程代碼手動線程,而是更徹底地使用GCD。請參閱[從線程遷移](https://developer.apple.com/library/ios/documentation/General/Conceptual/ConcurrencyProgrammingGuide/ThreadMigration/ThreadMigration.html#//apple_ref/doc/uid/TP40008091-CH105-SW1)在_Concurrency編程指南._ – Rob