0

QSqlQueryModelを使用して、データベースに挿入された最後の値を取得するクエリを呼び出し、行のタイムスタンプをチェックされた以前の値と比較して、特定のテーブルのデータ変更を常にチェックするアプリケーションをQtで作成しています。データが変更されたかどうかを知らせる信号を発するメソッドを呼び出すタイマーを使用して、100ミリ秒ごとにチェックします。ただし、これによりプロセッサに大きな負荷がかかり、アプリを閉じるまでコンピュータが使用できなくなることがあります。すべてのテーブルに関連する一種の「ライブ」フィードに値を表示するために、同じデータベースとアプリ内の他の多くのテーブルに実装する必要があるため、プラットフォームのパフォーマンスをテストしているだけです。私はスレッドについて読んだことがありますが、それを実装する方法については実際には手がかりがありません。これを行う別の方法はありますか?何をすすめますか?

4

2 に答える 2

1

私の推測では、クエリの実行には100ミリ秒以上かかるため、基本的にデータベースにクエリをオーバーロードし、前のクエリが終了していない間にクエリを積み重ねます。

QTimerの再起動タイマーではなく、シングルショットタイマーを使用してください。スロットでクエリが終了した後でのみ、タイマーを再起動します。

于 2012-12-05T23:24:38.967 に答える
0

アプローチを変更して別のデータベースサーバーに切り替えました。現在、次のようにトリガーを使用してpostgresqlを使用しています。

CREATE FUNCTION notification_trigger() RETURNS trigger AS $$

DECLARE

BEGIN
 execute 'NOTIFY ' || TG_RELNAME || '_' || TG_OP;
 return new;
END;

$$ LANGUAGE plpgsql;

次に、次のようにトリガーを呼び出します。

CREATE TRIGGER sometable_trigger BEFORE insert or update or delete on table1 
execute procedure notification_trigger();

それが誰かを助けることを願っています。

于 2012-12-20T13:21:16.180 に答える