マルチスレッドを使用してDelphiアプリケーションを改善するためにOmnithreadを使用することを検討し始めました。1つ以上のワーカータスクの作成については、ドキュメントで十分に説明されているため、ボタンのクリックから呼び出す長いアクションをこのデモコード(Async、CreateTaskなど)に置き換えることができます。私が苦労しているのは、次のように動作する私の最も「厄介な」コードを置き換える方法です。
ハードウェアモジュールに対応する単一クラスインスタンスの概念があります。このクラスは、ハードウェアの現在の値と設定を公開する1つ以上のプロパティを公開します。プロパティは、読み取り専用または読み取り/書き込みの場合があります。これらのクラスインスタンスのそれぞれについて、ゼロからいくつかの表示フォームが表示される場合があります。表示フォームには、TTimerと、前述の公開されたプロパティのビルドリストがあります。このリストは、ラベルや編集コントロールなどの適切な名前のコントロールを照合するために繰り返され、RTTIメカニズムを使用して、コントロールとそのプロパティの間で値を取得および設定します。その結果、実際のハードウェアモジュールに優れたUIを提供し、複数のフォームを開くことができるよりも副作用があります。そのうちの1つでデータを変更すると、すぐ後に他のフォームにそのデータが表示されます。このプロパティの監視は、TTimerが300ミリ秒間隔でティックすることによって実行されます。ティックごとに、クラスのすべてのプロパティをスキャンし、フォームの一致するコントロールを更新します。タイマーは、開いているフォームの存続期間中実行されます。フォームは必要に応じて作成され、解放されます(これには、ハードウェアを検査するためのフォームが開いていない場合、監視タスクを実行できないため、アプリケーションを可能な限り高速に実行する必要があるという便利なパフォーマンスの最適化があります)。
UIスレッドでTTimerを使用するのではなく、スレッドを使用して公開されたプロパティにアクセスするためのより良い方法はありますか?それとも、同期の問題が利点を上回りますか?スレッド化が役立つ場合、ティックタイマーをエミュレートするなどの繰り返しタスクをどのように作成しますか?