如何循环每秒去执行某个事件;类似Timer控件功能;但是要比Timer控件的时间精度高!求代码!

解决方案 »

  1.   

    你这样说的话,那么就用一个线程吧,类似下面的
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, SyncObjs;type
      TTimeControl = class(TThread)
      private
        FTimeRange: Integer; //毫秒
        FEvent: TSimpleEvent;
      protected
        procedure Execute; override;
        procedure DoSomeThing;
      public
        constructor create(const ATimeRange: Integer);
        destructor  destroy; override;
      end;  TForm1 = class(TForm)
        btn1: TButton;
        procedure btn1Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        { Private declarations }
        FTimeControl: TTimeControl;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}{ TTimeControl }constructor TTimeControl.create(const ATimeRange: Integer);
    begin
      FTimeRange := ATimeRange;
      FEvent := TSimpleEvent.Create;
      FreeOnTerminate := False;
      inherited Create(False);
    end;destructor TTimeControl.destroy;
    begin
      Terminate;
      if Assigned(FEvent) then
        FEvent.SetEvent;
      FreeAndNil(FEvent);
      inherited;
    end;procedure TTimeControl.DoSomeThing;
    begin
      ;
    end;procedure TTimeControl.Execute;
    begin
      while not Terminated do
      begin
        if FEvent.WaitFor(FTimeRange) <> wrTimeOut then
        begin
          Terminate;
          Break;
        end
        else
          DoSomeThing;
      end;
      inherited;
    end;procedure TForm1.btn1Click(Sender: TObject);
    begin
      FTimeControl := TTimeControl.create(300); //300毫秒
      FTimeControl.Resume;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    begin
      FreeAndNil(FTimeControl);
    end;end.
      

  2.   

    本帖最后由 bdmh 于 2011-08-08 08:26:07 编辑
      

  3.   

    谢谢楼上的2位大神!还是CSDN好啊!
      

  4.   

    用多媒体定时器最精确了包含mmsystem
    timeSetEvent