5

アプリケーションの設計に適合する設計パターンを探しています。

私のアプリケーションは大量のデータを処理し、いくつかのグラフを生成します。データ処理 (ファイルからのフェッチ、CPU を集中的に使用する計算) とグラフ操作 (描画、更新) は、別のスレッドで実行されます。

グラフはスクロールできます。この場合、新しいデータ部分を処理する必要があります。グラフには複数の系列が存在する可能性があるため、複数のスレッドを生成できます (系列ごとに 2 つのスレッド、データセットの更新用に 1 つ、グラフの更新用に 1 つ)。

複数の進行状況バーを作成したくありません。代わりに、グローバルな進行状況を知らせる単一の進行状況バーが必要です。現時点では、MVC と Observer/Observable について考えることができますが、少しぼやけています :) 誰かが私を正しい方向に向けてくれるかもしれません、ありがとう。

4

4 に答える 4

2

このようなスレッドまたは非同期プロセス/タスクがある状況では、各プロセスを表す(理想的にはカプセル化する)抽象型またはオブジェクトをメインスレッドに含めると便利です。したがって、ワーカースレッドごとに、おそらくOperationメインスレッドにそのワーカーを管理するためのオブジェクト(これを呼びましょう)があり、明らかにこれらの操作を保持するためのリストのようなデータ構造があります。

該当する場合、各オペレーションはそのワーカーの開始/停止メソッドを提供し、場合によっては、その特定のオペレーションのタスクの進行状況と予想される合計時間または作業を表す数値プロパティを提供します。単位は必ずしも時間ベースである必要はありません。6,230の計算を実行することがわかっている場合は、これらのプロパティを計算カウントと考えることができます。さらに、各タスクには、適切なメカニズム(コールバック、クロージャ、イベントディスパッチ、またはプログラミング言語/スレッドフレームワークが提供するメカニズム)で、現在の進行状況の所有操作を更新する何らかの方法が必要になります。

したがって、実際の作業が別々のスレッドで実行されている間、「メイン」スレッドの対応するOperationオブジェクトは継続的に更新され、ワー​​カーの進行状況が通知されます。プログレスバーはそれに応じて更新され、プログレスバーフレームワークにとって意味のある方法で、オペレーションの「予想」時間の合計をその合計にマッピングし、オペレーションの「進行」時間の合計を現在の進行状況にマッピングします。

明らかに、これを実際に実装するために行う必要のある考慮事項/作業は他にもたくさんありますが、これがその要点を示してくれることを願っています。

于 2009-02-14T21:28:12.313 に答える
1

この種のことについては、Observer/Observable を使用してください。一部のオブジェクトは、さまざまな一連の処理スレッドを監視し、概要バーを更新してステータスを報告します。

于 2009-02-14T19:09:25.250 に答える
1

複数の進行状況バーはそれほど悪い考えではありません。または、複数のスレッドが実行されていることを示す複雑な進行状況バー (ダウンロード マネージャー プログラムが時々持つような) かもしれません。UI が直感的である限り、ユーザーは追加のデータを高く評価します。

このような設計上の質問に答えようとするとき、まず、他のアプリケーションでの類似または類似の問題と、それらがどのように解決されているかを調べます。そのため、複雑な進行状況を示す他のアプリケーション (ダウンロード マネージャーの例など) を検討して調査し、既存のソリューションをアプリケーションに適応させることをお勧めします。

申し訳ありませんが、より具体的なデザインを提供することはできません。これは単なる一般的なアドバイスです。:)

于 2009-02-14T19:04:28.663 に答える