我有一个ai循环,我想要为我的iphone应用程序编写。我的理解是,这个循环将花费很长时间进行计算并阻塞主要应用程序。
我想把它放在一个不同的线程中,并运行事件之外的所有东西。
例如,我会有一个事件,它会在玩家开始时被调用。AI线程会监听它并做出反应。
我的人工智能线程与主线程通信的最佳方式是什么?我经常使用NSNotificationcenter,但我读到了一些奇怪的东西,比如它不会在正确的线程上触发事件?
通过事件进行通信的最佳方式是什么?
发布于 2009-11-16 07:09:08
我的建议是使用NSOperationQueue来执行AI处理操作。当用户执行操作时,创建一个处理响应该事件的AI处理的NSOperation,并将其添加到NSOperationQueue。如果这些操作之间存在依赖关系,或者如果您希望将处理拆分为较小的子操作,则可以将这些操作设置为仅在满足特定条件时进行处理。
放置在NSOperationQueue中的操作将在后台线程上运行,因此它们不会阻塞主线程。对于UI更新或其他需要在主线程上执行的操作,我建议在操作中使用-performSelectorOnMainThread:withObject:waitUntilDone:调用一个方法,该方法通过NSNotificationCenter的-postNotificationName:object:发布通知。让你的视图控制器或其他控制器响应这些通知,并根据AI例程的结果做他们需要做的事情。
发布于 2009-11-16 07:10:27
我强烈建议您考虑使用NSOperation / NSOperationQueue,而不是手动启动单独的线程。它更容易使用,更不容易出错,并且在web上到处都有关于tutorials and examples的文档。
发布于 2009-11-16 07:03:48
您可以使用方法- performSelectorOnMainThread:在主线程上执行给定的方法,使用- performSelector:onThread:或- performSelectorInBackground:在另一个线程上执行方法。使用这些方法,您可以跨线程触发事件。
但请注意,要使用- performSelector:onThread:,必须在目标线程上运行Run循环,否则您的方法将不会执行。
https://stackoverflow.com/questions/1739176
复制相似问题