现有2个过程A和B,A使用Timer控制每隔一定时间T执行一次,执行完成以后再执行B过程,如果B执行时间超过A的时间间隔T,这时Timer执行A的定时到了,程序会怎么处理?有没有其它好的方法去控制?线程吗

解决方案 »

  1.   

    哈,进入Timer就enabled := False; B执行完了再True.
      

  2.   

    //会出现冲突
    //建议判断一下是否在处理中procedure TForm1.Timer1Timer(Sender: TObject);
    begin
      if FRunning then Exit;
      FRunning := True;
      try
        A;
        B;
      finally
        FRunning := False;
      end;
    end;
      

  3.   

    const
      WM_A = WM_User + 1;
      WM_B = WM_User + 2;type
      TFormDemo = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        FTickCount: LongInt;
        procedure A(var Msg: TMessage); Message WM_A;
        procedure B(var Msg: TMessage); Message WM_B;
      public
        { Public declarations }
      end;var
      FormDemo: TFormDemo;implementation{$R *.dfm}{ TFormDemo }procedure TFormDemo.FormCreate(Sender: TObject);
    begin
      PostMessage(Handle, WM_A, 0, 0);
    end;procedure TFormDemo.A(var Msg: TMessage);
    begin
      FTickCount := GetTickCount;
      {ProcessA}
      PostMessage(Handle, WM_B, 0, 0);
    end;procedure TFormDemo.B(var Msg: TMessage);
    var
      Interval: Integer;
    begin
      {ProcessB}
      Interval := GetTickCount - FTickCount;
      while Interval < 10000 do //假设A的执行间隔为10秒
      begin
        Interval := GetTickCount - FTickCount;
        Application.ProcessMessages;
      end;
      postMessage(Handle, WM_A, 0, 0);
    end;
      

  4.   

    我一般是设一个全局变量,A完成后设1.B发现变量为1,则进行下一步,然后再设为2.A发现为2,则下一步.
      

  5.   

    那就不要用Time来控制,用递归!
      

  6.   

    我一般是设一个全局变量,A完成后设1.B发现变量为1,则进行下一步,然后再设为2.A发现为2,则下一步.
    //////////////////////////////////////////////////
    不牵扯到多线程当然可以这样,你这样做还会有问题吗?应该能够解决了!