
12.04.2009, 10:54
|
|
Участник форума
Регистрация: 28.04.2008
Сообщений: 172
С нами:
9492347
Репутация:
270
|
|
подскажите как сделать чтобы через заданный промежуток времени программа выполняла команды,но без TTimer а.например через каждые 3 часа отправляла лог или проверяла подключен ли интернет или размер файла лога.....
Класс
Код:
unit WaitThread;
interface
uses Classes, Windows;
type
TWaitThread = class(TThread)
WaitUntil: TDateTime;
procedure Execute; override;
end;
implementation
uses SysUtils;
procedure TWaitThread.Execute;
var
Timer: THandle;
SystemTime: TSystemTime;
FileTime, LocalFileTime: TFileTime;
begin
Timer := CreateWaitableTimer(NIL, FALSE, NIL);
try
DateTimeToSystemTime(WaitUntil, SystemTime);
SystemTimeToFileTime(SystemTime, LocalFileTime);
LocalFileTimeToFileTime(LocalFileTime, FileTime);
SetWaitableTimer(Timer, TLargeInteger(FileTime), 0,
NIL, NIL, FALSE);
WaitForSingleObject(Timer, INFINITE);
finally
CloseHandle(Timer);
end;
end;
end.
Использовать можно так:
Код:
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
procedure TimerFired(Sender: TObject);
end;
//.....
implementation
uses WaitThread;
procedure TForm1.Button1Click(Sender: TObject);
var
T: TDateTime;
begin
with TWaitThread.Create(TRUE) do
begin
OnTerminate := TimerFired;
FreeOnTerminate := TRUE;
// Срок ожидания закончится через 5 секунд
WaitUntil := Now + 1 / 24 / 60 / 60 * 5;
Resume;
end;
end;
procedure TForm1.TimerFired(Sender: TObject);
begin
ShowMessage('Timer fired !');
end;
(c) DRKB
|
|
|