Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Отправить сообщения в службу


Ling ©   (2006-09-12 18:36:00) 

Пытаюсь написать службу.
В эту службу необходимо отправлять сообщения.
Подскажите, как мне это сделать :)
Вот моя неуклюжая попытка:
Служба:


unit ServiceUnit;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,JobClasses,
 xmldom, XMLIntf, msxmldom, XMLDoc,SyncObjs,ComObj,Activex;

type

 TMainThread=class(TThread)
 private
   FEvent:TEvent;
 protected
   procedure Execute; override;
 public
   constructor Create(CreateSuspended: Boolean);
   destructor destroy;override;
 end;

 TService1 = class(TService)
   XMLDocument1: TXMLDocument;
   procedure InitPathExe;
   procedure ServiceStart(Sender: TService; var Started: Boolean);
   procedure ServiceStop(Sender: TService; var Stopped: Boolean);
   procedure ServiceCreate(Sender: TObject);
   procedure ServiceDestroy(Sender: TObject);

 private
   FMainThread:TMainThread;
   Storage:TspData;
   FPathexe:string;
   { Private declarations }
 public
   function GetServiceController: TServiceController; override;

   { Public declarations }
 end;

var
 Service1: TService1;

implementation

{$R *.DFM}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
 Service1.Controller(CtrlCode);
end;

function TService1.GetServiceController: TServiceController;
begin
 Result := ServiceController;
end;

procedure TService1.InitPathExe;
var
 Buffer: array[0..MAX_PATH] of Char;
begin
 FillChar(buffer, sizeof(buffer), #0);
 GetModuleFileName(HInstance, buffer, MAX_PATH);
 FPathExe := string(buffer);
end;

procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
 FMainThread.Resume;
end;

procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
 FMainThread.Terminate;
end;

{ TMainTread }

constructor TMainThread.Create(CreateSuspended: Boolean);
begin
 inherited;
 FEvent := TEvent.Create(nil, False,false, 'Global\JMService_EventLoad');
end;

destructor TMainThread.destroy;
begin
 FEvent.free;
 inherited;
end;

procedure TMainThread.Execute;
var
 SL:TStringList;
 wr:TWaitResult;
begin
 SL:=tStringList.Create;
 try
   while not terminated do
   begin
         wr:= FEvent.WaitFor(1000);
         case wr of
           wrSignaled:SL.Add(TimeToStr(now)+'::wrSignaled');
           wrTimeout:SL.Add(TimeToStr(now)+'::wrTimeout');
           wrAbandoned:SL.Add(TimeToStr(now)+'::wrAbandoned');
           wrError:SL.Add(TimeToStr(now)+'::wrError');
         end;
     SL.SaveToFile('d:\sp\log.txt');
   end;
 finally
 end;
end;

procedure TService1.ServiceCreate(Sender: TObject);
begin
 FMainThread:=TMainThread.Create(true);
end;

procedure TService1.ServiceDestroy(Sender: TObject);
begin
 FMainThread.Terminate;
 FMainThread.Free;
end;

end.


из длругого приложения я делаю следующее::

procedure TForm1.FormCreate(Sender: TObject);
begin
 ...
 FEvent := TEvent.Create(nil, False,false, 'Global\JMService_EventLoad');
end;

procedure TForm1.ff1Click(Sender: TObject);
begin
 FEvent.SetEvent;
end;


Сергей М.   (2006-09-13 10:08:00) [1]


> FEvent := TEvent.Create(nil, False,false, 'Global \JMService_EventLoad');


А вот цитата из справки:

Name can be a string of up to 260 characters, notincluding the backslashcharacter ( \).

??


Fay   (2006-09-12 22:28:00) [2]

А где тут сообщения?


Наверх

Титульная страница Поиск, карта сайта Написать письмо