如何使用可可应用程序启动无通讯和无控制台进程并与之通信?

时间:2013-05-31 22:38:40

标签: objective-c cocoa process quicktime launch

我正在使用QuickTime API,需要在后台执行一些冗长的操作(以小时为单位)。不幸的是,它不是多线程友好的,所以我回过头来在一个单独的进程中执行任务,所以所有QuickTime相关的调用都可以在它的主线程中发生。

启动后,我需要一种获得反馈的方法,因为操作可能需要很长时间。

我不确定如何做到这一点,特别是:

  • 是否应将单独的进程编译为另一个cocoa应用程序或命令行工具?
  • 如何从主cocoa app启动它?
  • 如何定期从中获取对象以获取状态信息?
  • 如何确定何时完成?
  • 如何避免在调用时显示窗口/控制台?
  • 如何将它作为.app包的一部分,以便它不会作为单独的可执行文件显示给用户?

这些实际上是6个以上的问题,但它们非常相关且非常具体,我认为任何需要启动外部流程(而不是产生工作线程)的人都可以从他们的答案中受益。通用代码示例非常有用。

1 个答案:

答案 0 :(得分:1)

如果可能,则在命令行工具或其他形式的无GUI应用程序中实现该功能。对于Cocoa应用程序,可以防止它们出现在Dock或Force Quit对话框中,但是命令行工具是一个单独的二进制文件,无论如何都会这样做,所以这可能是一种更好的方法。

在推出该工具方面,NSTask& NSPipe是您努力的朋友。该工具绝对可以保存在主应用程序包中,在Resources目录或其他类似的内部,然后在需要时启动。您可以使用管道来回沟通。

我没有任何示例代码可供使用,并且已经有很长一段时间了,因为我有机会使用这些类中的任何一个,所以我可以提供的信息是有限的,但它应该足以指出你正确的方向。