我需要运行两种方法,我们称之为metA和metB。
当我开始编写这个应用程序时,我在不使用线程的情况下调用了这两种方法,但应用程序开始冻结,所以我决定使用线程。
metA和metB由触摸事件调用,因此它们可以按任何顺序随时发生。他们不依赖彼此。
我的问题是两个线程开始运行所需的时间。使用
创建线程的时间之间存在延迟[NSThread detachNewThreadSelector:@selector(.... bla bla
和线程开始运行的时间。
我想这次与iOS创建线程所需的时间有关。我怎样才能加速这个?如果我预先创建两个线程,我如何让它们只在需要时做它们的东西并且永远不会终止?我的意思是,一种总是活着的睡眠线程,当被问及在那之后睡觉时会起作用吗?
感谢。
答案 0 :(得分:3)
如果您想避免创建新线程的昂贵启动时间,请按照建议在启动时创建两个线程。要让它们仅在需要时运行,您可以让它们等待条件变量。由于您使用NSThread
类进行线程处理,我建议使用NSCondition
类作为条件变量(另一种方法是使用POSIX线程(pthread)condition variables,{ {1}})。
您必须要注意的一件事是,如果您在线程仍在运行时遇到另一个触摸事件。在这种情况下,我建议使用队列来跟踪工作项,然后触摸事件处理程序可以只将工作项添加到队列中,只要队列不为空,工作线程就可以处理它们。
这是实现此目的的一种方法:
pthread_cond_t
答案 1 :(得分:1)
如果您可以定位iOS4及更高版本,请考虑使用具有Grand Central Dispatch异步队列的块,该队列在队列管理的后台线程上运行...或者为了向后兼容,如上所述使用NSOperation队列中的NSOperations来使用在后台为你工作。如果两个操作必须同时运行,您可以使用NSOperationQueue准确指定要支持的后台线程数。