0

Cとncursesライブラリを使用してアプリケーションを作成しています。私のプログラムは、いくつかのセンサーと集中的にデータを交換しています(いくつかのデータを送受信します)。多くのセンサーがあります(最大500)。ここで、各センサーに関する情報を「ユーザーフレンドリー」な方法で表示したいと思います。これは、ユーザーが選択できるアイテムを含む、一種のスクロール可能なリストである必要があります。今の私の最善のアイデアは、ncursesの「メニューライブラリ」を使用することです。手順は次のとおりです。

  1. アイテムのリストを作成します(実際には文字列の配列で、各文字列にはセンサー番号、タイプ、その他の情報が含まれています。
  2. メニューを作成し、これらのアイテムをメニューに追加します
  3. 表示メニュー

大丈夫に聞こえるかもしれませんが、問題は、各センサーの情報(実際の状態)が動的に更新されることです。わかりました。情報を更新するための「ホットボタン」を実装できますが、非常に時間がかかる場合があります。すべてのアイテムを再構築して再表示することはお勧めできません。では、これをどのように行いますか?

4

1 に答える 1

0

基本的にデータ ソースのビューがあり、データ ソースが更新および変更されているため、ビューアーがビューを更新できるように、特定のデータ項目が変更されたことをビューアーに通知する必要があります。

通常、このような状況で私が行うことは、データの消費者であるビューアーとセンサー スレッドであるプロデューサーの間で共有されるデータ ソースが共有されるときに、共有データが更新され、その後、イベント メッセージがビューアに送信されます。

イベント メッセージは通常、何らかの FIFO キューイング メカニズムを使用して送信されるため、ビューアはプロデューサーによって送信された順序でイベントを受信します。

Windows などのイベント ドリブン ウィンドウ システムでは、通常、PostMessage()特定のウィンドウまたは特定のスレッドにメッセージを投稿できる機能があります。

したがって、基本的なウィンドウ設計は、ソース データが更新されたことを示すメッセージ識別子と、更新されたアイテムを示す識別子またはインデックスを持つメッセージを受け入れることです。その後、ビューアはストレージ領域にアクセスしてその特定のデータ項目を領域から取得し、そのデータを使用してビュー内の特定の項目テキストを更新します。

これはほぼ標準のMVC パターンです。厄介なのは、ソース データの更新イベントをビューアーに伝える方法です。

于 2012-08-14T19:18:23.643 に答える