关于程序查询,窗口停滞造成TIMER无效的问题(100)

  • 主题发起人 ainiyang
  • 开始时间
A

ainiyang

Unregistered / Unconfirmed
GUEST, unregistred user!
一个程序调用了我的DLL窗体。上面用TIMER每秒涮一下信息。但是当主程序查询时。TIMER就失效了。等主程序执行完。TIMER才可以正常。请问下这是什么原因造成的?我如何解决。解决问题是关键。大大如果没大多时间。就告诉我一下。如何解决吧。关键主程序不是我写的。我只是提供DLL
 
代码贴出来看看~~
 
比如说我用TIMER计时。每秒写入一个随机数到MEMO1。如果这时候我连接数据库。做一个大的查贸易。TIMER就会顿住。等查询完成后。才继续添加。有没有方法实现程序运行大的查询或者其它会顿住界面的工程时。TIMER能继续使用
 
但是当主程序查询时。TIMER就失效了。等主程序执行完。TIMER才可以正常。-----------------主程序和Ttimer是用的一个进程,当然如此。
 
你的查询放到线程里去, 估计就可以了. 因为, TTimer 的事件执行也是通过 Windows 消息队列来传的, 你占用了主线程. 其它消息就发不出去了~
 
可以给我做个例子吗?
 
timer 有系统忙的时候会被丢弃。
 
关于多线程的例子看一下 Delphi 自带的 Demo 就有了。
 
直接看源码, TTimer 类代码没有几行~
 
其实time一直在执行,只是显示的消息被延迟了!呵呵!例如98下的时钟显示程序,按Ctrl_Alt_Del后,屏幕被锁定,但是记数仍然继续!
 
Timer 是通过发送消息到句柄来完成触发事件的动作的。所以,可以把查询写在线程中,就能解决问题。
 
如果主程序你不能改,那个查询又放在主线程中,而你只能做DLL被调用。、那么你即使在dll中使用多线程,依然无法及时更新主线程中的VCL窗口。 所以你必须要求主线程做修改。那个查询必须放在非主线程中进行,否则,即使你强行修改主线程中的刷新信息,也是极度不安全的。
 
顶部