按钮响应的问题!(100)

  • 主题发起人 主题发起人 black_yin
  • 开始时间 开始时间
B

black_yin

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中加了一个Timer用于定时查询数据库,数据库表里面的数据很多,需要几十秒或是几分钟才能全部查完。当数据库没有查完的时候去点击另外一个按钮,这时按钮没有响应,一定要等查完数据库才能响应,看上去程序就像死了。请问怎么样才能使按钮马上就响应呢?是不是不能使用Timer,要用线程呢?或者是要在Timer中插入异步操作Application.ProcessMessages?Timer是一个独立的线程吗?各位看看,急啊!
 
与timer无关,建议用线程~~
 
肯定要用线程的。TIMER 也在主线程。。你试试在TIMER sleep。。整个程序就不动了
 
你平会隔十分钟才运行一次自己 TIMER 查询数据库呀! 当执行TIMER 过程中 按钮是不可点的enabled=false 执行完了才能点。 就这么简单, 不要想太复杂了
 
用线程查询吧,timer本身是运行在主进程里的,它的事件会阻塞主进程的。
 
这个问题百分百要用多线程
 
使用Application.ProcessMessages时,只是让程序不像假死。最好是能够给查询另外开一个线程。
 
用两个Timer就解决了,Timer1:执行sql,并且在sql执行之前Application.ProcessMessages,同时设置一个标志。Timer2:  检测标志,如果标志sql执行状态时,同时query尚未返回结果,那么停掉timer1。  如果标志表示正在查询,而query又已经返回了结果,就重起Timer1,并重置标志。
 
楼上的不算是好法,timer越多,程序效率越差,因为timer是运行在主进程的
 
恩,关于实现这个问题的方法,上面介绍了很多了。但我想我们应该考虑下为什么要如此,我们确实需要同时查询码?我一口气打开员工查询、工资查询、会员查询。。。没必要,打开多个查询,会占用资源的,查询显示难免不分配内存,这样查询多了也难免不内存报错(溢出),特别是数据量大的时候。有些查询,可以不用轮询方式,而采用事件或其他方式驱动起来。比如,多个客户端都可以修改员工资料,一个修改后,可以通知其他客户端更新数据(驱动),而不是大家各自定时去数据库查询(轮询)。而如果只是单独无关联的,而数据量又比较大,还是建议一个个的查询,不要同时查询。#
 
对建议不要把数据一次取完就算是一次获取,但是你操作数据的话也是逐步的
 
只要在同一个进程(你的程序)中,无论你有多少个TTimer,只要某个线程(含主线程)中自执行数据库查询的语句,都会导致整个进程等待,所以,呵呵,最好用两个进程,一个查询,一个控制(停止按钮所在的线程),我就是这样处理的,否则你就会等待很多分钟了!
 
你用Timer来查询数据库,呵呵,设计思路不对。可以看看Buddy.Sun说的。不知道你做什么系统,还是用线程吧。
 
后退
顶部