[Lazarus-es] Formulario no refresca en ciclos grandes

JoshyFun joshyfun en gmail.com
Lun Dic 28 23:06:59 CET 2009


Hello christian,

Monday, December 28, 2009, 10:38:20 PM, you wrote:

cO> intenta algo como
cO> application.processmessage
cO> o usa algo mas decente con hilos de ejecucion (aveces le llaman hebras)
cO> http://wiki.lazarus.freepascal.org/Multithreaded_Application_Tutorial/es

Una hebra es otra cosa, aunque algunos a veces lo usan incorrectamente
de manera indiferente.

Cuando un sistema operativo ejecuta cosas lo puede hacer en 3 modos
"básicos":

Proceso:
-------------
A) El código tiene una zona de programa común (todas las copias del
mismo proceso comparten el código).
B) La zona de datos es diferent para cada proceso.
C) Stack independiente para cada proceso.

Thread o Hilo
-------------
A) El código es común entre todos los procesos iguales e hilos
iguales.
B) Zona de datos común para todos los hilos de un mismo proceso.
C) Stack independiente para cada hilo.

Fiber o hebra
-------------
A) El código es común entre todos los procesos iguales, hilos y
hebras iguales.
B) Zona de datos común para todos los hilos y hebras de un mismo
proceso.
C) Stack común para todos.

Esto implica que la multitarea en una hebra o "fiber" no es posible
del mismo modo que con un "thread", y esta ha de ser "cooperativa" al
igual que lo eran los threads y los procesos en Win 3.1.

La ventaja de la hebra sobre el thread es que hacer un "task
switching" no requiere poner el procesador en modo "context switch" lo
que requiere muchos ciclos, ya que todo el proceso se realiza en el
modo "usuario" o "ring 3".

Windows creo que soporta hebras desde Vista en adelante, pero
programar con hebras es para artistas :)

-- 
Best regards,
 JoshyFun





More information about the Lazarus-es mailing list