処理する必要がある一連の計算があります。計算とその実行順序はすべて、ユーザーが UI で定義します。
次々と走っていくだけなら、さほど難しくはないだろう。ただし、一部の計算は同時に処理する必要があり、すべての計算はいつでも個別に一時停止できる必要があります。また、いつでも注文を再配置したり、処理する新しい計算を追加したりできる必要があります。だから私が何をするにしても、これを処理するのに十分柔軟でなければなりません.
UI で、ユーザー コントロールのリストボックス (必要に応じてキュー) を想像してください。各ユーザー コントロールには計算の名前と一時停止ボタンが表示されます。また、処理中にいつでもこのリストに計算を追加できます。
これを行う最善の方法は何ですか?
各計算を独自のスレッドで実行する必要がありますか? もしそうなら、実行中のプロセスのリストをどのように保存すればよいですか? キューを計算プロセッサに渡すにはどうすればよいですか? キューが変更されるたびに (新しい順序付けまたは新しい計算)、計算プロセッサがこれを認識できるようにするにはどうすればよいですか?
私の最初の考えは次のとおりでした。
CalcProcessor class
CalcCalculation class
の2CalcProcessor
つLists
がありCalcCalculations
ます。1 つは UI に表示される「キュー」(おそらくそれへのポインタ? またはライブで更新されることを保証する他の方法) であり、もう 1 つは現在実行中の計算のリストです。
どういうわけかCalcCalculation
、独自のスレッドで実行して計算を処理し、一時停止イベントを処理できるようにする必要があります。そのため、UI で押された一時停止ボタンの情報をCalcProcessor
オブジェクトに送信し、次に正しいに送信する方法が必要CalcCalculation
です。
デビッド・ホープに応じて編集:
お返事をありがとうございます。
はい、n 個の計算がありますが、UI で処理する計算を追加できるため、これはいつでも変更される可能性があります。
とにかくデータを共有する必要はありません。アプリケーションには、同時に実行する数を指定する設定があります (つまり、任意の時点で 10、たとえばキュー内の最初の 10 - 1 が終了すると、キュー内の次の計算が処理を開始します)。
計算には、何らかのデータ ソース (データベースまたはファイル) からデータを取得し、それを分析して、そのデータに対していくつかの計算を実行することが含まれます。計算を一時停止する必要があると言うとき、スレッドを一時停止するという意味ではありません...つまり、(たとえば、アプリケーションのこの部分をまだ作成していないため) スレッドから行ごとに読み取っている場合です。データベースと現在の行の処理が完了すると一時停止するいくつかのライブ計算を実行します...そしてUIで一時停止ボタンがクリックされていないときに続行します-これは、while(notPaused)ループのように原始的なもので実行できますUI からスレッドへの一時停止情報。