while true do
 begin
     If abc Then break;
     application.ProcessMessages;
 end;
abc是在其它操作中得到的变量,要在循环体里面加一个如果在10秒内abc没有得到真值就自动退出循环体。

解决方案 »

  1.   

    var abc:boolean=false;
    procedure TForm1.Button1Click(Sender: TObject);
    var a:cardinal;
    begin
      a:=gettickcount;
      while true do
      begin
        if (gettickcount-a>10000) or abc then
        begin
         showmessage('');
         break;
        end;
      end;
    end;
      

  2.   

    OldTime := GetTickCount;
    while GetTickCount - OldTime <= 10000 do
     begin
         If abc Then break;
         application.ProcessMessages;
     end;
    不过你这个程序的效率实在是……
      

  3.   

    在循环体开始时保存时间到一个变量如startTime,然后在循环时判断过了多少秒
    strtTime := now;
    while 
    beign
      if (SecondsBetween(now,startTime)>10) and (abc=false) then
        break;
      ...
    end
      

  4.   

    jinjazz你好快,抢我的一楼,不过没有我的程序好看哦
      

  5.   

    var
      t1,t2:cardinal;t1:=gettickcount;
    while true do
     begin
         If abc Then break
         else
         begin
           t2:=gettickcount;
           if t2-t1>10000 then
             break; 
         end;
         application.ProcessMessages;
     end;
      

  6.   

    jinjazz你好快,抢我的一楼,不过没有我的程序好看哦
    -----------------------------------------------------还好比楼上的好看一点点