2

我正在创建一个必须使用该system(const char*)功能来完成一些“繁重工作”的应用程序,并且我需要能够为用户提供一个粗略的进度百分比。例如,如果操作系统正在为您移动文件,它会为您提供一个进度条,其中显示移动的数据量和要移动的数据量显示在窗口上。我需要这样的东西。如何才能做到这一点?

编辑:基本上,我让用户可以选择以压缩格式保存文件。如果他们这样做,它会正常保存,然后运行以下代码:

char* command = (char*)[[NSString stringWithFormat:@"tar -jcvf %@.tar.bz2 %@", saveurl.path, filename] cStringUsingEncoding:NSUTF8StringEncoding];
system(command);

有时这需要一点时间(该应用程序处理视频文件),所以我希望能够给他们一个估计的完成时间。

4

2 回答 2

5

我正在创建一个必须使用该system(const char*) 功能来完成一些“繁重工作”的应用程序

不,它不必这样使用system()。事实上,它不应该。还有很多其他用于运行子进程的 API,几乎所有这些 API 都会更好。在 Cocoa 中,最明显更好的选择是NSTask.

在任何情况下,除了子流程本身之外,没有什么可以说明子流程正在取得多少进展。如果您正在运行的程序不提供报告进度的方法,那么希望渺茫。没有其他东西可以预测子流程的目的或目标是什么,更不用说判断它距离实现该目标还有多远。

即使该程序确实报告了进度,您也需要一种方法来接收该信息。 system()不允许这样做。 NSTask就像popen()手动分叉和执行程序一样。

于 2013-03-29T03:56:06.873 回答
2

您将需要一个命令行程序,该程序具有将进度信息传达回您的应用程序的方式(或者可能只是将进度信息写入您在可可应用程序中解析的日志文件)。你确定你真的需要这样做吗?

对于您编辑的示例,您可能会考虑仅放置某种微调器或沙漏类型的 UI 指示器,以向他们显示正在写入,同时允许他们继续其他工作。您无法预测存档创建时间,尤其是当您对其添加压缩时。

于 2013-03-29T03:55:30.543 回答