Programación De Hilos En Gambas


Objetivo: Programación De Hilos En Gambas
Hola,

Es posible programar hilos en gambas? he buscado información en la web, y no encuentro. Quiero ejecutar varias tareas a la vez, y no encuentro otra forma


saludos

última edición por MiguelVelandia el Domingo, 12 Septiembre 2010, 23:15; editado 1 vez
Perfil MP  
Objetivo: Re: Programación De Hilos En Gambas
No es posible. El intérprete de gambas se ejecuta en un único thread, por lo tanto no existen hilos como tal.

Dependiendo qué es lo que intentas hacer, hay algunos métodos (como los de la clase HttpClient .Get) que permiten descargar páginas web de manera asíncrona. Otro método ampliamente utilizado, por ejemplo en Python, es el uso de un "single-shot-timer" que supongo se podrá implementar en gambas.

Imagina por ejemplo que necesitas procesar gran cantidad de datos al inicio de la aplicación, como la carga de ficheros o similar. Si eso lo haces en el evento Form_Load(), la interfaz de tu aplicación no se mostrará hasta que finalice ese largo proceso... pareciendo que la aplicación se ha colgado o ha dejado de responder. Pues bien, usando un timer como disparador con un delay = 0 y colocando el método o función que realiza el trabajo pesado en el evento del Timer, hace que el evento se ponga en la cola de procesos del main_loop y se ejecute cuando lo demás (en este caso, mostrar el formulario) haya terminado.

Es un poco difícil de explicar, pero se usa muy a menudo en otros lenguajes y en gambas también debería funcionar. No sé si eso soluciona tu problema o parte de él, pero es lo que hay... o mejor dicho, lo que no hay

Saludos

Perfil MP  
Objetivo: Re: Programación De Hilos En Gambas
Esto fue publicado cuando estaba apenas desarrollandose gambas3

no se ejecuta el formulario en un hilo?

si ejecuto el formulario, esta corriendo un unico hilo, pero si me doy cuenta, estos son ejemplos de hilos:

1) un projecto grafico es un form que es un hilo, todo proceso es un hilo hijo embebido dentro del programa, respondiendo no a mandatos, sino eventos!!!!!
2) cuando ejecutamos shell, el mando se traspasa a ese shell, pero en gambas3 si usamos exec alli ya es un hilo, y se manipula este como un proceso aparte en otro subrutina

estas son pistas que refutan la respuesta anterior..

Adicional dejan sin constestar la pregunta: y mi respuesta deja duda, ya que demuestro que si se puede! PERO COMO? deb e ser grafico el programa a juro para que se implementa hilos?

última edición por mckaygerhard el Lunes, 11 Noviembre 2013, 19:58; editado 1 vez
Perfil MP  
Objetivo: Re: Programación De Hilos En Gambas
En realidad lo que dices no son hilos (o threads) que se puedan manejar fácilmente desde gambas (por ejemplo no existen las colas o los semáforos). Son procesos o subprocesos que no tienen que ver con gambas. gambas no es multitarea, se ejecuta en un solo proceso, aunque no discuto que se puedan lanzar procesos separados mediante Shell o Exec, pero pueden bloquear el proceso inicial del programa gambas si dicho proceso no ha finalizado antes de que lo haga el programa gambas, ya que todo se ejecuta dentro del mainloop de tu programa gambas.

Sin embargo, la nueva clase Task, implementa algo parecido a los threads, pero siguen sin ser realmente threads tal como se entienden en otros lenguajes. Yo lo llamaría más bien subprocesos.

En todo caso, seguro que Benoit puede darnos una respuesta mucho más fundamentada, así que esperemos a la respuesta a tu mensaje en la lista de correo.

Saludos

Perfil MP  
Objetivo: Re: Programación De Hilos En Gambas
Aporto aqui una experiencia que he tenido con un programa:

En el evento _show() del formulario, si añadia un codigo, el formulario no se mostraba hasta que se terminaba de ejecutar ese código. Pero si ese código lo metia en una subrutina, si se mostraba/actulizaba el formulario.

Por ejemplo:

Citar:
Public sub Form_show()

shell "libreoffice"

end


Hasta que no terminaba de ejecutar libreoffice, no se mostraba o refrescaba el formulario.
Pero si hacia:

Citar:
Public sub Form_show()

comando()

end

public sub comando()
shell "libreoffice"
end


Si se refrescaba el formulario, aun cuando el libreoffice estaba ejecutandose.

Explicación:
Supongo que lo que hace el interprete de gambas (una instancia de una clase interprete) es crear otra instancia de la clase "interprete" para las subrutina comando(). y como no tiene valor de devolución, la instancia principal, puede seguir ejecutandose, mientras que la otra sigue su camino de interpretación.


Página 1 de 1


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4665s (PHP: -81% SQL: 181%)
Consultas SQL: 47 - Debug off - GZIP Activado