我正在寻找iOS中多线程的等效模式,因为在.NET中存在脉冲和等待。从本质上讲,我希望一个后台线程处于休眠状态,直到设置了一个标志,这实际上会将线程“踢”到行动中。
它是loop + thread.sleep()的替代品。可以在与执行处理的实际后台线程不同的线程上设置该标志。谢谢!
答案 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:...