2

関数を使用して「重い作業」を行う必要があるアプリケーションを作成していsystem(const char*)ます。ユーザーに大まかな進行状況のパーセンテージを与えることができる必要があります。たとえば、OS がファイルを移動している場合、移動されたデータの量と移動するデータの量がウィンドウに表示された進行状況バーが表示されます。私はそのようなものが必要です。これはどのように行うことができますか?

編集:基本的に、ユーザーにファイルを圧縮形式で保存するオプションを提供します。その場合、通常どおり保存してから次のコードを実行します。

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 は他にもたくさんありますが、そのほとんどすべてが優れています。Cocoa では、最も明らかな優れたオプションはNSTask.

いずれにせよ、サブプロセス自体を除いて、サブプロセスがどれだけ進行しているかを知ることはできません。実行しているプログラムが進行状況を報告する手段を提供しない場合、望みはほとんどありません。サブプロセスの目的や目標が何であるかを推測することさえできません。

プログラムが進行状況を報告する場合でも、その情報を受け取る手段が必要になります。 system()それは許しません。 または、プログラムを手動でフォークして実行する場合と同様に行いますNSTaskpopen()

于 2013-03-29T03:56:06.873 に答える
2

進捗情報をアプリケーションに返す方法を持つコマンド ライン プログラムが必要です (または、cocoa アプリで解析するログ ファイルに進捗情報を書き込むだけです)。本当にこれを行う必要がありますか?

編集した例では、ある種のスピナーまたは砂時計タイプの UI インジケーターを配置して、書き込みが進行中であることを示し、他の作業を続行できるようにすることを検討できます。特に圧縮を追加する場合、アーカイブの作成時間を予測することはできません。

于 2013-03-29T03:55:30.543 に答える