定时任务的程序中,有多个时间时间点,每天轮循执行相应的任务
时间点是存放在数据库中,取出来之后存放在一个循环链表当中。
用Timer已经实现,但看到网上有很多帖子建议用多项程来代替Timer的实现。不知道多线程该如何实现多个时间点的定时任务,希望能给个例子看看。多谢!

解决方案 »

  1.   

    想知道,到底是用多线程好还是用Timer好?如果是多线程,如何控制允许创建的最多线程数?如果是同一个时间点要处理不同的任务该怎么处理?
      

  2.   

    一个例子:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;  TMyThread = class(TThread)
      private
        FTime : String;
      protected
        procedure Execute; override;
      public
        constructor Create(Suspended: Boolean;  ATime: String);
      end;var
      Form1: TForm1;implementation{$R *.dfm}constructor TMyThread.Create(Suspended: Boolean;  ATime: String);
    begin
      inherited Create(Suspended);
      FTime := ATime;
    end;procedure TMyThread.Execute;
    begin
      while not Terminated do
      begin
        if FormatDateTime('hh:mm:ss', Now()) = FTime then
        begin
          Application.MessageBox(PChar('定时时间到: ' + FTime), '提示信息', MB_ICONINFORMATION or MB_OK);
          break;
        end;
        Sleep (100);
      end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      with TMyThread.Create(True, '12:59:40') do
      begin
        FreeOnTerminate := True;
        Resume;
      end;
      with TMyThread.Create(True, '13:00:10') do
      begin
        FreeOnTerminate := True;
        Resume;
      end;
      with TMyThread.Create(True, '13:01:00') do
      begin
        FreeOnTerminate := True;
        Resume;
      end;
    end;end.