Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-05-2006
Aldo Aldo is offline
Miembro
 
Registrado: ene 2004
Posts: 46
Poder: 0
Aldo Va por buen camino
Crear un servicio

Hola a todos:

Estoy trabajando con Delphi 5 y tengo un servicio creado para realizar una serie de tareas automáticamente según la hora a la que están programadas para que se ejecuten.

Bien lo importante es que tengo otra aplicación que es un manager del servicio y desde la que puedo enviar códigos de control para que el servicio sea capaz de ejecutar. Ej: Detenerse, Iniciarse, etc. Pero lo que me lleva ahora mismo a un quebradero de cabeza es la de hacer que se ejecute una de las tareas específicas de todas las que están programadas.

Esto lo hago de dos formas
1 - Le envío un código de control de ejecución de tareas y el servicio al muestra una ventana con todas las tareas programadas y el usuario final puede seleccionar la tarea que desee ejecutar en ese momento y una vez seleccionada, el servicio la ejecuta en ese momento y no esperando a la hora que tenga programada.
2 - La segunda forma es tratar de ejecutar lo mismo pero de forma silenciosa. O sea que la aplicación Manager le debe enviar un código de control al servicio para decirle que debe ejecutar una tarea XXX, pero no encuentro como decirle que la tarea que se debe ejecutar es la llamada XXX y no la YYY o ZZZ, etc. ( NOTA IMPORTANTE: Las tareas no son nada fijo, ni prestableciso, el usuario del manager puede crear las tareas que quiera, por lo que no podría tener de antemano predefinido un código de control para cada una de las posibles tareas, porque no se saben cuantas se crearán ).

Se me había ocurrido trabajar con Átomos Globales o una cosa por el estilo, pensando que el Servicio tenía algún procedimiento para el manejo de Mensajes, pero veo que no lo tiene y no sé como seguir. Después investigando vi que los servicios tienen una propiedad pública que se llama ServiceThread y ésta tiene un método que se llama ProcessRequests que es muy parecido a los procedimiento de manejos de mensajes de windows. Pensé en coger la dirección del método, almacenarla en una variable y redireccionar ese método a uno mío que haga lo que yo quiero, que es verificar si ha llegado el código de control que dice que se debe ejecutar la Tarea XXX y leer de los Átomos Globales el nombre de la tarea que se debe ejecutar y después que se siga ejecutando el método como estaba programado antes porque en este caso lo que haría sería invocar la variable en la que lo tengo programado. Sería algo así

Crear un Tipo en la unit
TProcessRequests = procedure (WaitForMessage: Boolean) of Object;

Esto sería en la declaración Private del Servicio
FProcessRequests : TProcessRequests;
FszAtomName : String;

Esto iría en el ServiceStart
FProcessRequests := ServiceThread.ProcessRequests;
ServiceThread.ProcessRequests := ProcessRequestsService; // OJO: Esto es lo que no sé hacer y falla cuando se compila.

Esta sería mi procedimiento ProcessRequestService

procedure TServicioGDBMant.ProcessRequestsService(WaitForMessage: Boolean);
var
msg : TMsg;
PStr : PChar;
begin
GetMessage(msg, 0, 0, 0);

if msg.message = PRUEBA_CODIGO_CONTROL_EJECUTAR_TAREA_X then
begin
PStr := StrAlloc( 256 );
try
GlobalGetAtomName( Msg.WParam, PStr, 256 );
FszAtomName := String( PStr );
ShowMessage( FszAtomName );
finally
StrDispose( PStr );
end;
end;

if Assigned( FProcessRequests ) then
FProcessRequests( WaitForMessage );
end;




El tema es que logro guardar el método en la variable, pero no logro redireccionar ese método a un nuevo procedure que he hecho yo para que esto funcione como yo había explicado antes.

Lo ideal hubiera sido heredar un nuevo componente TServiceThread y sobrescribir el método en cuestión y todo solucionado, pero es que esto es una propiedad del TService y no sé como hacerlo.

¿Se os ocurre otra idea?. Igual me estoy liando y la solución la tengo delante de mis narices, pero no la veo, estoy obcecado. O talvez eso que quiero hacer no se puede.

Os agradecería que alguien me de un norte de como hacer eso que quiero. Muchas gracias por el tiempo prestado.
Responder Con Cita
  #2  
Antiguo 06-07-2006
toni_lp toni_lp is offline
Registrado
 
Registrado: jul 2006
Posts: 2
Poder: 0
toni_lp Va por buen camino
No es respuesta, es pregunta

Disculpá que te moleste con esto, pero veo que tenés bastante claro el tema de servicios.
Estoy intentando empezar a programar un servicio y necesitaría que me des los lineamientos básicos y cosas a tener en cuenta para ponerlo en funcionamiento.
Desde ya muchas gracias
Responder Con Cita
  #3  
Antiguo 29-02-2008
fide fide is offline
Miembro
 
Registrado: oct 2006
Posts: 331
Poder: 18
fide Va por buen camino
lee la ayuda sobre TService
Responder Con Cita
  #4  
Antiguo 04-03-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por fide Ver Mensaje
lee la ayuda sobre TService
Vaya fide, creo que no te has fijado la fecha del último post
Responder Con Cita
  #5  
Antiguo 04-03-2008
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cHackAll Ver Mensaje
Vaya fide, creo que no te has fijado la fecha del último post
je, je... seguramente ya lo solucionó
Responder Con Cita
  #6  
Antiguo 04-03-2008
toni_lp toni_lp is offline
Registrado
 
Registrado: jul 2006
Posts: 2
Poder: 0
toni_lp Va por buen camino
jejeje ... y ya ni me acuerdo como lo hice. De todas maneras gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Servicio arantzal Varios 3 27-06-2007 11:50:55
Como puedo crear un servicio para monitorear BD marcoev Conexión con bases de datos 2 12-09-2005 19:46:06
Crear Servicio WEB y publicarlo en TOMCAT Khelma Internet 0 26-04-2005 14:11:21
Servicio NO-IP StartKill Varios 1 29-03-2005 01:18:30
Servicio RAS fabianmk Internet 0 11-11-2004 21:44:28


La franja horaria es GMT +2. Ahora son las 22:12:53.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi