我正在Qt上编写一个应用程序,它使用QSqlQueryModel不断检查某些表上的数据更改,调用查询以检索插入数据库的最后一个值,并将行中的时间戳与检查的前一个值进行比较。我使用定时器调用一个方法来检查数据是否已更改,每100毫秒检查一次。然而,这会在处理器上造成巨大负荷,有时会导致计算机失效,直到我关闭应用程序。我只测试平台的性能,我需要将它实现到同一数据库和应用程序中的许多其他表,以便在与每个表相关的某种“实时”源上显示值。我已经读过有关Threads的内容,但还没有真正了解如何实现它。还有另一种方法吗?你会推荐我什么?
答案 0 :(得分:1)
我的猜测是您的查询执行时间超过100毫秒,因此您基本上会使用查询重载数据库,将它们叠加在一起,而之前的查询尚未完成。
不使用来自QTimer的重启计时器,但使用单次计时器。只有在您的插槽中完成查询后才能重新启动计时器。
答案 1 :(得分:0)
我更改了我的aproach并切换到另一个数据库服务器,我现在使用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();
希望它有所帮助。