![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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] |
#5
|
|||
|
|||
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. |
![]() |
|
|
![]() |
||||
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 |
![]() |
|