0

私はココアにダウンロードマネージャーを実装しています。ユーザーは複数のダウンロードリクエストを追加でき、リクエストマネージャーはリクエストの進行状況をパネルに表示します。キュー内のリクエストの一時停止/再開について問題が発生しました。

簡単にするために、最大同時操作数が1であると仮定して、順序:1、2、3、4、5でいくつかの要求を追加します。中断されない場合、リクエストは1から5まで順番にダウンロードされます。リクエスト1を一時停止すると、リクエスト2は引き続きダウンロードされます。その間、リクエスト1を再開します。したがって、リクエスト2が終了した後、リクエスト1をリクエスト3の前に続行できることを願っています。

ここでの問題は次のとおりです。一時停止した単一のリクエストの場合、リクエストは実際にはキャンセルされました。リクエストを再開すると、新しいリクエストが初期化されてから開始されました。操作キューで[self cancel]、次のリクエストを開始できるようにリクエストが一時停止された場合に送信しました。ただ、再開したらどうしたらいいのかわかりません。キャンセルされたリクエストを再びキューに追加することはできません。新しいものを作成してキューに追加した場合、以前のように優先順位をどのように約束できますか?

それを行う方法のヒントを教えてください。

ありがとう

4

1 に答える 1

0

現在、私は以下を使用して自分で解決策を作成しています。

  1. から継承されたカスタムリクエストを作成しASIHttpRequestます。
  2. NAMutableArrayすべてのリクエストを含めるように作成します。
  3. リクエストが1つ追加された場合は、配列を列挙して、最大のリクエストが実行されているかどうかを確認します。そうでない場合は、独自のキューでリクエストを開始します。最大値を超える場合は、リクエストを配列に追加し、そのステータスをwaiting;に設定します。
  4. 1つのリクエストが終了または失敗している場合は、配列を列挙して、ステータス付きの時間を追加することにより、最初の位置にあるリクエストを確認しますwaiting
于 2012-12-12T05:38:58.160 に答える