program Project1;
uses
? SvcMgr,
? service in 'service.pas' {netor1: TService},
? thread in 'thread.pas';
{$R *.RES}
begin
? Application.Initialize;
? Application.CreateForm(Tnetor1, netor1);
? Application.Run;
end.
?
unit service;
interface
uses
? Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs;
type
? Tnetor1 = class(TService)
??? procedure ServiceStart(Sender: TService; var Started: Boolean);
??? procedure ServiceStop(Sender: TService; var Stopped: Boolean);
? private
??? { Private declarations }
? public
??? function GetServiceController: TServiceController; override;
??? { Public declarations }
? end;
var
? netor1: Tnetor1;
implementation
uses thread;
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
? netor1.Controller(CtrlCode);
end;
function Tnetor1.GetServiceController: TServiceController;
begin
? Result := ServiceController;
end;
procedure Tnetor1.ServiceStart(Sender: TService; var Started: Boolean);
var thre:threa;
begin
thre:=threa.Create(False);
Started:=True;
end;
procedure Tnetor1.ServiceStop(Sender: TService; var Stopped: Boolean);
var thre:threa;
begin
thre.Terminate;
Stopped:=True;
end;
end.
?
unit thread;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Dialogs;
type
? threa = class(TThread)
? private
??? { Private declarations }
? protected
??? procedure Execute; override;
? end;
implementation
{ Important: Methods and properties of objects in visual components can only be
? used in a method called using Synchronize, for example,
????? Synchronize(UpdateCaption);
? and UpdateCaption could look like,
??? procedure thread.UpdateCaption;
??? begin
????? Form1.Caption := 'Updated in a thread';
??? end; }
{ thread }
procedure threa.Execute;
var LogFile:TextFile;
var logtxt:TFileStream;
begin
while true do begin
? if not fileexists('c:/log.txt') then
?? begin
?? logtxt:=TFileStream.Create('c:/log.txt',fmCreate);
?? logtxt.Free;
? end;
? AssignFile(LogFile,'c:/Log.txt');
? Append(LogFile);
? WriteLn(LogFile,DateTimeToStr(Now));
? CloseFile(LogFile);
? sleep(5000);
end;
end;
end.