我的想法是从0,开始读到100000,计算所消耗的时间。用timer控件来读,TIMER控件竟然失灵!!
  
procedure TZZForm.Button3Click(Sender: TObject);
var
  sj: Longword;
  label  lb;
begin
  sj:=0;
  t1.interval:= 1000 ;// timer控件 ,每秒触发一次
  t1.Enabled:= true;
  
  lb:
  if sj< 100000 then
  begin
    Application.ProcessMessages;
    inc(sj);
    goto  lb;
  end
  else
    t1.Enabled:= false;
end;procedure TZZForm.t1Timer(Sender: TObject);  //timer触发
var
  i:integer;
begin
  i:= StrTOINt(edit1.Text);
  inc(i);
  edit1.Text:= inttostr(i);
end;timer控件失灵!有什么方法吗?各位大大救救我啊

解决方案 »

  1.   

    正常情况下,TIMER控件每一秒中就触发了,可是此时此刻它竟然不触发了!
      

  2.   

    没有失灵,只是你的timer的interval太长了,循环了100000次,还没有产生timer事件。  t1.interval:= 1000 ;// timer控件 ,每秒触发一次 -------------->改成t1.interval:=1;你再看看效果。还有,Edit1.Text初始值要有。
      

  3.   

      lb:  // 这段代码执行需要1秒么?386也不需要1秒吧?
      if sj < 100000 then
      begin
        Application.ProcessMessages;
        inc(sj);
        goto  lb;
      end
      else
        t1.Enabled:= false; 
      

  4.   


    如果t1.interval:=1了还不能产生事件,那么你在循环中加个延时:
      begin 
        Application.ProcessMessages; 
        inc(sj); 
        sleep(1);
        goto  lb;
      

  5.   


    如果t1.interval:=1了还不能产生事件,那么你在循环中加个延时:
      begin 
        Application.ProcessMessages; 
        inc(sj); 
        sleep(1);
        goto  lb;
      

  6.   

    只单纯的计算一个消耗时间的话用GetTickCount即可。
    var
      sj: Longword;
      t1,t2:Cardinal;
      label  lb;begin
      sj:=0;
      t1:=GetTickCount;
      lb:
      if sj < 1000000 then
      begin
        Application.ProcessMessages;
        inc(sj);
        goto  lb;
      end;
      t2:=GetTickCount;
      ShowMessage(FloatToStr((t2-t1)/1000));