0

我正在寻找 iOS 中多线程的等效模式,因为 .NET 中有用于脉冲和等待的模式。本质上,我希望一个后台线程处于休眠状态,直到设置一个标志,这基本上“踢”线程进入行动。

它是 loop+thr​​ead.sleep() 的替代方案。该标志可以设置在与执行处理的实际后台线程不同的线程上。谢谢!

4

2 回答 2

2

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在后台线程中运行一些代码非常容易使用。

于 2012-04-09T01:26:01.347 回答
0

我不熟悉 .NET 中的这种模式,但故意锁定线程通常是一个坏主意(除非该线程无法继续,但听起来您希望它在大部分时间或至少长时间等待时间)。

这对调度程序不利,对系统资源不利。

你可以使用 NSThread 的 +detachNewThreadSelector:... 方法来创建一个新线程。你可以使用各种想法来尝试管理你的逻辑,以便在一个地方创建和维护这样一个线程,比如 NSObject 的 -performSelectorOnMainThread:...

于 2012-04-09T01:41:02.897 回答