私は、Windows、iOS、OSX上に構築されたクロスプラットフォームアプリケーションを持っています。iOS/OSX SetEvent()とWaitForSingleObject()に相当しますか?
私のWindowsアプリケーションでは、初期状態がunsignalledの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 Programming Guide._ – Rob