如何让程序顺序执行!在线等,立刻加分(100)

  • 主题发起人 主题发起人 robert168
  • 开始时间 开始时间
R

robert168

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Form1.test;begin connect; i:= i + 1; ......end问题如下:在该procedure有另外一个procedure----connect.connect运行比较慢,普遍需要几秒种以上。我本来是想Connect运行完成后再执行后面的语句 i:= i + 1;.但是我在运行过程中发现,程序实际在Connect未运行完前就已经启动了后面的操作!我把Connect改成function,结果也一样。请问,如果让Connect运行完后在运行后面的语句呢?
 
在connect后面加上Application.ProcessMessages;试试看
 
如果还不行的话 设置一个全局标志位然后在connect之后用while True dobegin if bSign then begin i:=i+1; ... break; end;end;
 
你的Connect多半是通讯吧!贴出代码来.
 
谢谢楼上两位huangsong的第一种方法无效;第二种类似function,我设置function时候,连result都提前返回了。
 
connect; While (not bConnect) and (not bError) do Sleep(50); i:= i + 1;connect中可能执行了通讯连接在连接控件(假设存在)OnConnect中bConnect := True;在连接控件(假设存在)OnError中bError := True;
 
procedure TRasDialerForm.Connect;var ri1 : integer;begin InfoListBox.Clear; Qnet.RequestLive := True; Qnet.SQL.Clear; Qnet.SQL.Add('SELECT * FROM "net.db" '); Qnet.Open; DialingServer := Qnet.FieldValues ['Ds']; DialingUserName := Qnet.FieldValues ['User'];; DialingPassword := Qnet.FieldValues ['Pass'];; Qnet.Close; get(DialingServer, DialingUserName, DialingPassword);end;
 
还是象huangsong说的那样加一个全局标志比较妥当
 
你的get(DialingServer, DialingUserName, DialingPassword);有没有返回值?把Connect改成返回值为Boolean的函数,如果get()有返回值则写成 if get(...) then Result := True;程序中改成 if connect then i:= i + 1;没有测试过,你试试吧。你还可以把i:= i + 1;放到get()语句后面试试
 
Connect没有结束前后面的代码是不可能执行的。lz在胡说八道。
 
connect过程执行过程中产生了异常,导致提前结束了执行,进入了下壹行程序,检查connect过程吧
 
to 地质灾害:你的说法不对,我遇到过这种情况:我有一个程序,用了ShellExecute()执行一个程序,那个程序从启动到出现登录窗口大概需要3~5秒,然后我会检索系统中的所有窗口来得到登录窗口的句柄,如果在ShellExecute()之后紧跟着检索语句则会找不到登录窗口的句柄,加入延时就一切OK(我有语句判断其执行是否成功)。所以我认为LZ的情况完全有可能发生,这可能是操作系统的原因,例如ShellExecute()语句,系统把它放到队列里后返回成功(>32)或失败的值,至于目标进程或文件是否完成运行或打开就不管了,而且由于Windows是多任务、多线程的操作系统,所以会立即执行后面的语句,这并不是代表ShellExecute()没有结束,只是这种情况不多,遇到了才知道,而且只是特定的语句或命令才可能产生这种现象。以上只是我个人的浅见。
 
ShellExecute执行完跟你ShellExecute里调用的程序有没有执行完根本一点关系也没有。
 
首先给CONNECT过程加上异常保护,检查是否发生了异常,再说其他的可能
 
不懂就问是好事。支持。单步跟踪看看。
 
robert168,怎么加个异常这么慢,你在线吗?
 
谢谢大家,这程序我现在暂时用SLEEP解决了,先用用再说。
 
你的get(DialingServer, DialingUserName, DialingPassword);有没有返回值?把Connect改成返回值为Boolean的函数,如果get()有返回值则写成 if get(...) then Result := True;程序中改成 if connect then i:= i + 1;没有测试过,你试试吧。你还可以把i:= i + 1;放到get()语句后面试试----------------------------------------这种方法已经测试过,连RESULT也提前返回了,当时CONNECT还没运行完呢
 
后退
顶部