iOS相当于Pulse和等待线程

时间:2012-04-09 01:18:01

标签: ios multithreading

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

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

2 个答案:

答案 0 :(得分:2)

iOS和OS X上有各种不同的混合搭配线程API。你用什么来创建你的线程?

最简单的建议是使用Grand Central Dispatch (GCD) semaphore

设置代码:

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

答案 1 :(得分:0)

我不熟悉.NET中的这种模式,但有目的地锁定一个线程通常是一个坏主意(除非该线程无法继续,但听起来你想让它等待大部分时间或者至少为很长一段时间。)

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

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