> The standard Borland service unit runs a perfectly normal application
> message pump, and you can drop event drive components like ICS, timers,
> etc, onto the form and they just work, and you can post message to the
> form handle.
How to post the message to what handle.
If you create a new service application, you can drop non-UI components on
it.
I have tried posting a message (postmessage/ postThreadMessage) to the
Service handle and servive threadid, but none of them seem to work
Am I missing something here ?
Paul
Main Service application unit :
type
TRPPollSvc = class(TService)
procedure ServiceExecute(Sender: TService);
procedure ServiceStart(Sender: TService; var Started: boolean);
procedure ServiceStop(Sender: TService; var Stopped: boolean);
procedure ServiceDestroy(Sender: TObject);
procedure ServiceCreate(Sender: TObject);
procedure WMError(var message: TMessage); message WM_ERROR;
private
{ Private declarations }
PServer : TPSvc;
FLogfileName : string;
FLogInitiated : boolean;
procedure Display(Msg: string);
public
function GetServiceController: TServiceController; override;
{ Public declarations }
end;
var
RPPollSvc: TRPPollSvc;
implementation
{$R *.DFM}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
RemotePassPollSvc.Controller(CtrlCode);
end;
function TRPPollSvc.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
procedure TRPPollSvc.ServiceExecute(Sender: TService);
begin
while not terminated do ServiceThread.ProcessRequests(true);
end;
procedure TRPPollSvc.ServiceStart(Sender: TService; var Started: boolean);
begin
// give handle to server object - it needs it to post a message to the
service application
PServer.MainHandle:= ServiceThread.ThreadID;// .Handle;
if PServer.StartServer then Started:= true
else Started:= false;
end;
procedure TRPPollSvc.ServiceStop(Sender: TService; var Stopped: boolean);
begin
PServer.StopServer;
Stopped:= true;
end;
procedure TRPPollSvc.ServiceDestroy(Sender: TObject);
begin
if Assigned(PServer) then
begin
PServer.Free;
PServer:= nil;
end;
end;
procedure TRPPollSvc.ServiceCreate(Sender: TObject);
begin
PServer:= TPSvc.Create;
PServer.OnDisplay:= Display;
FLogFileName:= ChangeFileExt(Application.ExeName, '.log');
end;
procedure TRPPollSvc.Display(Msg: string);
var
lFile: TextFile;
begin
AssignFile(lFile, FLogFileName);
try
try
if not FileExists(FLogFileName) then ReWrite(lFile)
else Append(lFile);
if not FLogInitiated then //just opened
begin
FLogInitiated:= true;
WriteLn(lFile, Msg);
end;
Writeln(lFile, Msg);
finally
CloseFile(lFile);
end;
except
end;
end;
procedure TRPPollSvc.WMError(var message: TMessage); //message WM_ERROR;
begin
Display('Error');
end;
end.
>From a thread within the server object I've tried to post a message to the
service handle/threadID
PostThreadMessage(MainHandle, WM_ERROR, 0, 0);
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://www.elists.org/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be