如何独立运行两个任务

时间:2011-05-24 19:14:22

标签: objective-c multithreading cocoa macos

我正在Mac OS X上构建一个应用程序(10.6)。在这个应用程序中,我有一个用户将提供输入的屏幕,并将其保存为本地文件夹中的plist。需要使用HTTP POST服务将此plist文件传输到服务器。应检查服务器连接,如果连接失败,文件将保存在本地文件夹中。使用一定的持续时间,将再次检查服务器连接,如果找到,则将所有文件逐个发送到本地文件夹中。

基本上,GUI应用程序将连续运行以从用户获取输入,在另一个线程中应该检查服务器连接并发送文件。

所以我的问题是什么可能是解决问题的好方法,如果有人可以发送一些示例代码,那对我来说会很棒。

谢谢, 巴伦

1 个答案:

答案 0 :(得分:3)

在Objective-C中有几种线程方法!最简单的策略是NSOperationQueue。覆盖NSOperation以处理您的HTTP请求,如果您需要在完成时通知它,可以选择设置完成块,将它的实例添加到NSOperationQueue对象,您就可以了。设置NSTimer以在第一次失败时重新安排上载。您可以使用NSURLConnection来处理Web内容。请注意,NSURLConnection可以异步或阻塞连接。由于你的NSOperation子类已经在一个单独的线程中运行,你可能想要使用阻塞方法(如果你不需要创建一个并发的NSOperation子类,这是更多的工作)。

你也可以使用Grand Central Dispatch的API,将新线程分离到你指定的方法,或者使用普通的旧c(我不推荐最后两个,但最好提一下)。作为奖励,当您同时运行多个操作时,NSOperationQueue和Grand Central Dispatch都知道“什么是正确的”,并且将扩展线程数以适应用户计算机中核心的数量,以获得最佳性能。

检查NSOperationQueue,NSOperation和NSURLConnection的文档。指南和示例项目将包含您开始正确方向所需的所有源代码。