gpt4 book ai didi

iOS/OSX 相当于 SetEvent() 和 WaitForSingleObject()?

转载 作者:行者123 更新时间:2023-12-01 17:56:30 29 4
gpt4 key购买 nike

我有一个基于 Windows、iOS 和 OSX 构建的跨平台应用。

在我的 Windows 应用程序中,我创建了一个初始状态为未发出信号的事件对象。我有一个线程等待通过调用 WaitForSingleObject() 发出此事件信号。 WaitForSingleObject() 会阻塞线程的处理,直到另一个线程调用 SetEvent()。

如何使用 GCDdispatch_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;即,它是“初始状态为无信号的对象”)。如果您使用 1,则对 dispatch_semaphore_wait 的第一次调用将立即得到满足,而不是实际等待任何信号(尽管在调用 BigSoundBufferUpdate 一次后,该 for 循环的第二次迭代将等待信号)。

关于iOS/OSX 相当于 SetEvent() 和 WaitForSingleObject()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36786739/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com