Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-06-2008
carlmasa carlmasa is offline
Registrado
 
Registrado: oct 2006
Posts: 3
Poder: 0
carlmasa Va por buen camino
Terminar una funcion en un tiempo

Buenos días a todos.

Os explico mi problema: Tengo un componente en el que cargo un fichero PDF para poder procesarlo, el problema radica en que hay algunos ficheros que no estando corruptos (se pueden abrir con el Adobe) se me queda pegado el programa intentando abrirlo. Me gustaría saber como hacer para que si en un cierto tiempo no se ha podido abrir me devuelva el control o mate ese proceso.

El código que utilizo es muy sencillo:

for i := 0 to NumeroDeFicheros do
begin
try
micomponente.Filename := NombreFichero;
.....
except
......
end;
end;

He estado viendo la función "WaitForSingleObject" pero no se como usarla con un componente.

Un saludo y muchas gracias
Responder Con Cita
  #2  
Antiguo 12-06-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
Habría que conocer mejor ese componente que usas.

Si se queda "pegado el programa" añade un Application.ProcessMessages dentro del bucle, antes de asignar el nombre de archivo.

El problema suponto que viene porque el componente no lanza excepciones y si tarda mucho, es normal que se paralice.

Si no sirve nada, igual creando varios hilos, puedes lograrlo, pero se va a complicar, primero sería conveniente saber si el componente tiene un método CancelarProcesado o algo así, podría solucionarse con un botón Cancelar .

¿nombre del componente?
¿tienes el código fuente?

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 12-06-2008
carlmasa carlmasa is offline
Registrado
 
Registrado: oct 2006
Posts: 3
Poder: 0
carlmasa Va por buen camino
Buenas Lepe.

El Application.ProcessMessage ya lo tengo puesto antes de cargar el fichero. El problema radica en que a la hora de cargar el fichero, éste debe tener algo que impide que termine de cargarse. Incluso el Timer que tengo puesto se queda parado.
El componente se llama PDFToolkit de la casa Gnostice y no tengo el código fuente ya que la empresa lo compró sin él (listos que son ellos ).
Me da la impresión que la única manera va a ser a través de hilos (aunque lo veo peligroso ya que tengo que recorrerme unos 18.000 pdf y se puede quedar el ordenador ko) o bien a través de funciones del tipo "WaitForSingleObject". Lo malo es que nunca he trabajado con ninguno de los dos.

Un saludo.
Responder Con Cita
  #4  
Antiguo 12-06-2008
Avatar de Crandel
[Crandel] Crandel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Parana, Argentina
Posts: 1.475
Poder: 23
Crandel Va por buen camino
Creo que tienes dos opciones para solucionar el problema:

1. Normalmente cuando uno compra un componente tiene la ventaja de poder contactarse con el soporte y este momento lo amerita. Explicales el problema y que te den una solucion.

2. Abrir cada documento en su propio hilo. Como se hace cuando tenes muchos archivos ? Creas una clase manejadora de hilos, entonces cada vez que necesitas crear un nuevo hilo, en vez de crearlo se lo pides a esa clase. A su vez la clase tiene definido un numero maximo de hilos a crear. Entonces si la clase tiene un hilo libre te lo entrega. Si en cambio estan todos ocupados pero no se llego a la cantidad maxima, lo crea y te lo entrega.

Saludos
__________________
[Crandel]
Responder Con Cita
  #5  
Antiguo 12-06-2008
carlmasa carlmasa is offline
Registrado
 
Registrado: oct 2006
Posts: 3
Poder: 0
carlmasa Va por buen camino
Con lo de ponerme en contacto con el servicio técnico ya lo he probado y que si quieres arroz catalina (estos yanquis están locos), así que veo que no me va a quedar más remedio que ponerme a estudiar los threads ya que nunca los he utilizado.

Muchas gracias.
Responder Con Cita
Respuesta



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
Terminar procesos elboru API de Windows 1 01-05-2008 20:59:54
Terminar proceso torito Varios 15 20-04-2007 02:44:36
Terminar con Procedures. alexxino Varios 3 28-01-2007 22:40:57
Funcion de tiempo pedromanuel JAVA 7 29-11-2006 00:00:58
Terminar Thread coulthard Internet 3 28-11-2004 22:05:08


La franja horaria es GMT +2. Ahora son las 15:36:41.


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