我正在 Qt 上编写一个应用程序,该应用程序使用 QSqlQueryModel 调用查询以检索插入数据库中的最后一个值并将行中的时间戳与检查的前一个值进行比较,从而不断检查某些表上的数据更改。我每 100 毫秒使用一个计时器检查一次,该计时器调用一个方法,该方法发出一个信号,告知数据是否已更改。但是,这会在处理器上产生巨大的负载,有时会导致计算机无法使用,直到我关闭应用程序。我只是在测试平台的性能,因为我需要在同一个数据库和应用程序中的许多其他表中实现它,以便在与每个表相关的一种“实时”提要上显示值。我已经阅读了有关 Threads 的信息,但还没有真正了解如何实现它。还有另一种方法吗?你会推荐我什么?
问问题
232 次
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 回答