Iphone多线程与人工智能

Iphone多线程与人工智能,iphone,multithreading,Iphone,Multithreading,我想为我的iphone应用程序编写一个ai循环。我的理解是,这个循环将需要很长时间来进行计算并阻塞主应用程序 我想把它放在另一个线程中,运行所有事件 例如,我会有一个事件,当玩家开始时会被调用。AI线程会听到它并做出反应 我的ai线程与主线程通信的最佳方式是什么?我经常使用NSNotificationcenter,但我读到一些奇怪的东西,比如它不会在正确的线程上触发事件 通过类似事件的操作与线程通信的最佳方式是什么?您可以使用方法-performselectornmainthread:在主线程上

我想为我的iphone应用程序编写一个ai循环。我的理解是,这个循环将需要很长时间来进行计算并阻塞主应用程序

我想把它放在另一个线程中,运行所有事件

例如,我会有一个事件,当玩家开始时会被调用。AI线程会听到它并做出反应

我的ai线程与主线程通信的最佳方式是什么?我经常使用NSNotificationcenter,但我读到一些奇怪的东西,比如它不会在正确的线程上触发事件


通过类似事件的操作与线程通信的最佳方式是什么?

您可以使用方法
-performselectornmainthread:
在主线程上执行给定的方法,以及
-performSelector:onThread:
-performselectornbackground:
在另一个线程上执行方法。使用这些方法可以跨线程触发事件


不过请注意,要使用
-performSelector:onThread:
运行循环必须在目标线程上运行,否则您的方法将不会被执行。

我的建议是对您的AI处理操作使用NSOperationQueue。在用户执行操作时,创建一个NSOperation,处理AI处理以响应该事件,并将其添加到NSOperationQueue。如果这些操作之间存在依赖关系,或者如果希望将处理拆分为更小的子操作,则可以将这些操作设置为仅在满足某些条件时处理


放置在NSOperationQueue中的操作将在后台线程上运行,因此它们不会阻止主线程。对于需要在主线程上执行的UI更新或其他操作,我建议使用-performSelectorOnMainThread:withObject:waitUntilDone:在操作中调用通过NSNotificationCenter的-postNotificationName:object:发布通知的方法。让你的视图控制器或其他控制器对这些通知做出响应,并按照你的人工智能程序的结果做他们需要做的事情。

< P>而不是手动地启动一个单独的线程,我敦促你考虑使用NScase/NSO操作队列。它更容易使用,更不容易出错,并且在整个web上都有很好的文档记录。

我使用
performSelectorInBackground在后台线程中启动AI,每次需要通知UI一些事情时(AI产生的操作、显示AI工作的进度条等)我使用
performselectornmainthread:


当然,记得在后台线程中创建一个NSAutoReleasePool。

lol-看看brad的解决方案,他比我快了10秒左右,而且比我要详细得多