我正在寻找 iOS 中多线程的等效模式,因为 .NET 中有用于脉冲和等待的模式。本质上,我希望一个后台线程处于休眠状态,直到设置一个标志,这基本上“踢”线程进入行动。
它是 loop+thread.sleep() 的替代方案。该标志可以设置在与执行处理的实际后台线程不同的线程上。谢谢!
我正在寻找 iOS 中多线程的等效模式,因为 .NET 中有用于脉冲和等待的模式。本质上,我希望一个后台线程处于休眠状态,直到设置一个标志,这基本上“踢”线程进入行动。
它是 loop+thread.sleep() 的替代方案。该标志可以设置在与执行处理的实际后台线程不同的线程上。谢谢!
iOS 和 OS X 上提供了多种不同的混合搭配线程 API。您使用什么来创建线程?
最简单的建议是使用Grand Central Dispatch (GCD) 信号量。
设置代码:
dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
// Then make sure your thread has access to this semaphore
线程代码:
dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
// Will block forever until the semaphore is triggered
触发代码:
dispatch_semaphore_signal(semaphore);
一个更好的建议:GCD 已经管理了自己的线程池,所以只需利用它而不是启动自己的线程。dispatch_async
在后台线程中运行一些代码非常容易使用。
我不熟悉 .NET 中的这种模式,但故意锁定线程通常是一个坏主意(除非该线程无法继续,但听起来您希望它在大部分时间或至少长时间等待时间)。
这对调度程序不利,对系统资源不利。
你可以使用 NSThread 的 +detachNewThreadSelector:... 方法来创建一个新线程。你可以使用各种想法来尝试管理你的逻辑,以便在一个地方创建和维护这样一个线程,比如 NSObject 的 -performSelectorOnMainThread:...