18

NSOperationQueue に挿入された実行中の NSOperation を一時停止する必要があります。現在、すべての操作をキャンセルして再開しています。しかし、これは、行われたプロセスに関して、ある種の重複につながります。NSOperationQueueのsetSuspendedフラグをつけてみました。しかし、それは操作を中断しているわけではありません。抜け道はありますか?

4

3 に答える 3

13

これを参照してください:リンク

そして、ここでアップルのドキュメントから:

キューの一時停止と再開操作の実行を一時的に停止する場合は、setSuspended:メソッドを使用して対応する操作キューを一時停止できます。

キューを一時停止しても、すでに実行中の操作がタスクの途中で一時停止することはありません。これは、新しい操作の実行がスケジュールされないようにするだけです。ユーザーが最終的にその作業を再開したいと思う可能性があるため、進行中の作業を一時停止するというユーザーの要求に応じてキューを一時停止する場合があります。

于 2012-08-16T09:06:31.697 に答える
3

私はこれを試したことはありませんが、おそらくここから始めるでしょう:

  • サブクラスにisPausedフラグを追加しますNSOperation
  • 操作のデータのコピー/移動メソッドを実装する
  • 一時停止の場合setCancelled:( のこの変化に注意してください-main)
  • 状態を一時停止操作から新しい操作に移行する新しい操作を作成する
  • 必要に応じて、優先度を調整してキュー内の操作の順序を並べ替えます
  • クローンをキューに追加します
  • -mainif inから戻る-main

これは一時停止するだけであることに注意してください。本当に一時停止して明示的に再開したい場合は、再開するときに手動で「新しい操作」を実行します。

現在、観察している場合や特別な完了がある場合は、他にもいくつかの問題があります。単純なケースでは、このアプローチはうまくいくようです。

于 2012-08-16T10:03:49.627 に答える