1

私は QuickTime API を使用しており、バックグラウンドでいくつかの長時間 (数時間) の操作を実行する必要があります。残念ながら、これはマルチスレッドに適していないため、フォールバックして別のプロセスでタスクを実行し、QuickTime 関連のすべての呼び出しをそのメイン スレッドで実行できるようにします。

起動後、操作には非常に時間がかかる可能性があるため、進行状況に関するフィードバックを得る方法が必要です。

具体的には、これを行う方法がわかりません:

  • 別のプロセスを別のココア アプリまたはコマンド ライン ツールとしてコンパイルする必要がありますか?
  • メインのココアアプリから起動するには?
  • オブジェクトから定期的にオブジェクトを取得してステータス情報を取得する方法は?
  • いつ終了したかを判断する方法は?
  • 呼び出されたときにウィンドウ/コンソールを表示しないようにする方法は?
  • ユーザーに別の実行可能ファイルとして表示されないように、.app バンドルの一部にする方法は?

これらは実際には 6 つ以上の質問ですが、非常に関連性が高く、非常に具体的です。(ワーカー スレッドを生成する代わりに) 外部プロセスを起動する必要がある人は誰でも、その回答から恩恵を受けることができると思います。一般的なコード例は非常に役立ちます。

4

1 に答える 1

1

可能であれば、コマンド ライン ツールまたは別の形式の GUI を使用しないアプリケーションで機能を実装します。Cocoa アプリケーションの場合、Dock または [強制終了] ダイアログに表示されないようにすることは可能ですが、コマンド ライン ツールはとにかくそれを行う単一のバイナリ ファイルであるため、おそらくより良い方法です。

ツールを起動するという点では、NSTask と NSPipe はこの取り組みにおけるあなたの友人です。このツールは、メイン アプリケーションのバンドル内、Resources ディレクトリ内などに確実に保持でき、必要なときに起動できます。パイプを使用して、相互に通信できます。

手元にサンプルコードがありません。また、これらのクラスのいずれかを使用する機会があったので長い間使用していないため、提供できる情報は限られていますが、正しい方向に向けるには十分なはずです。 .

于 2013-05-31T23:12:02.253 に答える