从数据库Qt实时提供值

时间:2012-12-05 20:44:11

标签: c++ database qt feed live

我正在Qt上编写一个应用程序,它使用QSqlQueryModel不断检查某些表上的数据更改,调用查询以检索插入数据库的最后一个值,并将行中的时间戳与检查的前一个值进行比较。我使用定时器调用一个方法来检查数据是否已更改,每100毫秒检查一次。然而,这会在处理器上造成巨大负荷,有时会导致计算机失效,直到我关闭应用程序。我只测试平台的性能,我需要将它实现到同​​一数据库和应用程序中的许多其他表,以便在与每个表相关的某种“实时”源上显示值。我已经读过有关Threads的内容,但还没有真正了解如何实现它。还有另一种方法吗?你会推荐我什么?

2 个答案:

答案 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();

希望它有所帮助。