4

Eclipse 内で実行されているジョブ (org.eclipse.core.runtime.jobs.Job を拡張するクラス) があります。ジョブは IProgressMonitor を取得し、それを使用して進行状況を報告しています。これで問題ありません。

これが私の問題です。処理中に、予想よりも多くの作業があることに気付くことがあります。時にはダブルも。ただし、進行状況モニターでティックの総数を設定すると、この値を変更する方法がありません。

この問題を克服する方法についてのアイデアはありますか?

4

5 に答える 5

5

SubMonitorを見てください。

   void doSomething(IProgressMonitor monitor) {
      // Convert the given monitor into a progress instance 
      SubMonitor progress = SubMonitor.convert(monitor, 100);

      // Use 30% of the progress to do some work
      doSomeWork(progress.newChild(30));

      // Advance the monitor by another 30%
      progress.worked(30);

      // Use the remaining 40% of the progress to do some more work
      doSomeWork(progress.newChild(40)); 
  }

技術的な詳細はさておき、これは私がそれを行う方法です:

  • あなたの通常の仕事は100です。
  • 初期作業を 200 に設定します。
  • やるべき作業の合計が 100 であると仮定して、進行するにつれて必要に応じて作業を増やします。
  • 作業が完了したら、その完了を合図します。

これには次の効果があります。

  • 100 ユニットを要する通常の作業項目では、50% の進行後、非常に速く完了します。
  • 長い作業項目では、最終的には着実に進歩します。

これは、ユーザーが期待するよりも速く完了し、長時間スタックしているように見えないため、より優れています。

ボーナスポイントについては、潜在的に長いサブタスクが十分に速く完了したことが検出された場合でも、進行状況を大幅に増やします。これにより、50% から完了までのジャンプが回避されます。

于 2009-07-10T07:39:59.980 に答える
0

私には「リグレッションモニター」のように聞こえます:-)

50%の進捗状況を表示していて、実際には25%しかないことがわかったとしましょう。どうしますか?戻る?

独自のIProgressMonitorを実装してそれを行うことができるかもしれませんが、ユーザーにとっての付加価値はわかりません。

于 2009-11-11T05:09:39.660 に答える
0

一般的に役立つ進行状況モニターの使用に関するeclipse.org の記事があります。私の知る限り、モニターのティック数を変更する方法はありません。そのため、初期パスを実行してタスクの相対的なサイズを推測し、ティックを各部分に割り当てない限り、ジャンプが発生します。

最初の 10% をジョブのサイズを決定するために割り当てることができますが、多くの場合、完了するまでそれを行うことはできません。

于 2009-07-10T09:24:16.667 に答える
0

IProgressMonitor を SubMonitor に変換すると、いつでも SubMonitor.setWorkRemaining を呼び出して残りのティック数を再分配できます。

SubMonitor の javadoc には、ティックの総数が事前にわからない場合に進行状況を報告する方法を示す次の例があります。

// This example demonstrates how to report logarithmic progress in 
// situations where the number of ticks cannot be easily computed in advance.

  void doSomething(IProgressMonitor monitor, LinkedListNode node) {
      SubMonitor progress = SubMonitor.convert(monitor);

      while (node != null) {
          // Regardless of the amount of progress reported so far,
          // use 0.01% of the space remaining in the monitor to process the next node.
          progress.setWorkRemaining(10000);

          doWorkOnElement(node, progress.newChild(1));

          node = node.next;
      }
  }
于 2015-03-17T08:26:46.180 に答える
0

この問題は、あなたが思っているよりも少し抽象的であることがわかると思います。あなたが尋ねている質問は、「どれくらい時間がかかるかわからない仕事をしています。途中まで終わったと言えるのはいつですか?」という質問です。答え: できません。進行状況バーは、進行状況を全体のパーセンテージとして表示するためにあります。合計またはパーセンテージがわからない場合、プログレス バーは面白くありません。

于 2011-06-29T14:10:12.987 に答える