当循环正在占用cpu时,如何响应另一鼠标点击事件。(10分)

  • 主题发起人 主题发起人 patriot
  • 开始时间 开始时间
P

patriot

Unregistered / Unconfirmed
GUEST, unregistred user!
一个循环要1个小时才能执行完,如下面的把一个数据表中的数据载到另以数据表中:
with adotable1 do
begin
open;
first;
while not eof do
begin
with adotable2 do
begin
open;
if not locate('name',edit1.text,[]) then
begin
adotable2.edit;
adotable2.insert;
adotable2.fieldbyname('name').asstring:=adotable1.fieldbyname('name').asstring;
end;
end;
next;
end;
当次循环正在执行时,我点击鼠标响应其他事件总是响应不了,该怎么办?不要让我等到循环结束。。
谢谢大家执教。。
 
1、把循环的代码写在线程中
2、加Application.Processmessages:
while not eof do
begin
Application.Processmessages:
if MustBreak then
Exit;
 
把循环的条件修改一下,加上一个可以与鼠标点击事件的共同条件这样就什么都可以作了!
:)
 
Application.Processmessages;
在循环里,加上这句,释放CPU去响应别的事件。
 
把耗时较长的循环写成一个线程.
接下来,鼠标,键盘等事件delphi就可以正常响应了.
不过小心些,在一个线程正在执行时,控制时小心些,不要造成资源冲突.
 
这段代码好像用SQL写效率能高一些
 
解决方法有 2:
1、使用SQL存储过程。数度快。容易实现。
2、使用多线程。技术难度较大。
 
我觉得好象写条sql语句就结了,很简单,insert
 
后退
顶部