PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Esperar a que un Thread se ejecute
Esperar a que un Thread se ejecute
Débuté par Javier Camales, 02 juil. 2015 10:55 - 3 réponses
Posté le 02 juillet 2015 - 10:55
Buenos días. tengo el siguiente problema:

En una ventana, tras seleccionar una serie de parámetros, ejecuto un proceso que importa datos de una base de datos MS Access. El proceso funciona correctamente pero cuando el fichero Access es muy grande aparece el mensaje No Responde de Windows y da la sensación de que está colgado.

Para resolverlo muestro una ventana (openchild) con un gif animado y un mensaje "Espere por favor" y después lanzo el proceso que importa los datos utilizando la instrucción threadexecute.

Lo que hace el proceso es crear una estructuras para importar las tablas del fichero access. Primer creo todas las estructuras e importo los datos y despues paso los registros importados a los ficheros windev de mi aplicación. El problema está en que si ejecuto el proceso con la orden threadexecute no hace nada, aparece la ventana de espera y se cierra como si el thread hubiese terminado. Si pongo un info después de la instrucción threadexecute entonces sí se ejecuta.

Creo que el problema está en que al lanzar el thread el control retorna al proceso pincipal (que es donde se cierra el mensaje de espera y la ventana desde la que se hace todo este proceso) y finaliza sin que el thread termine.

¿Puedo de algún modo esperar a que el trhead se ejecute antes de continuar el proceso? Uso Windev 18

El proceso que lanzo desde el click de un botón es:

OpenChild(WIN_Espera,"Importando datos, espere por favor")
ThreadExecute("Importar_Datos",threadNormal,Proc_Importar)
Close(WIN_Espera)
Close()

Saludos
Posté le 06 juillet 2015 - 09:01
Hola Javier, podrías utilizar lo siguiente:

NextTitle("Mensaje que quieres mostrar")
HourGlass(True)

ThreadExecute("Importar_datos",threadUseHyperFile,Proc_Importar)
WHILE ThreadState("Importar_datos")=threadRunning
Multitask(-5)
END

HourGlass(False)


Saludos
Posté le 06 juillet 2015 - 15:21
Muchas gracias Agustín.
Posté le 05 septembre 2015 - 16:59
Hola. La solucion aportada me parece correcta ya que es lo que se ha solicitado. Lo que no entiendo es cual es la ventaja de hacer todo el procesamiento de la importacion en otro thread. No se realiza ningun trabajo en paralelo. El programa permanece parado en el thread principal mientras termina el thread secundario. Usando Multitask periodicamente en el procedimiento de importación tambien eliminarias el mensaje de que el programa no responde sin tener que utilizar un thread adicional.


Rubén Sánchez Peña