读书人

timer和thread的有关问题寻解决方案

发布时间: 2012-04-05 12:42:40 作者: rapoo

timer和thread的问题,寻解决方案
定时任务的程序中,有多个时间时间点,每天轮循执行相应的任务
时间点是存放在数据库中,取出来之后存放在一个循环链表当中。
用Timer已经实现,但看到网上有很多帖子建议用多项程来代替Timer的实现。

不知道多线程该如何实现多个时间点的定时任务,希望能给个例子看看。多谢!

[解决办法]
用一个线程检查时间点,如果有某个时间点到时了启动处理线程处理,每到一个点就启动一个。

[解决办法]
多线程好, 理由略……
[解决办法]
一个例子:

unit Unit1;

interface

uses
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.

读书人网 >.NET

热点推荐