FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Funcionamiento interno del Timer
Compañeros del foro.
Tengo una duda que me gustaría me ayuden a resolverla. Es referente al funcionamiento del timer. Especificamente si el OnTimerEvent crea otro 'hilo' en la ejecución del programa desarrollado. Ejemplo. Si estoy en una pantalla actualizando datos de un registro de base de datos, y en ese momento se presenta el OnTimerEvent. ¿El proceso pasa el control al OnTimerEvent, y al terminar ese proceso regresa a donde estaba actualizando el registro de la base de datos? ¿Como funciona internamente? Gracias por sus aclaraciones, que se me permitirán entender más el funcionamiento del Delphi. Saludos... |
#2
|
||||
|
||||
TTimer es una clase que encapsula a varias funciones de la API de Windows, facilitando con ello su uso de forma inadvertida.
Cuando un temporizador TTimer se encuentra habilitado (Enabled = True), tiene un intervalo de milisegundos distinto de 0 y su evento OnTimer tiene código asignado (manejador de eventos), el componente llama a la función SetTimer de la API de Windows. Con ello el temporizador queda a la espera de un mensaje wm_Timer, enviado por el sistema operativo cada vez que transcurren los milisegundos indicados. Es importante aclarar que dicho mensaje es enviado en el contexto del hilo que hizo la llamada a SetTimer, por lo que ningún hilo nuevo es creado por estas funciones. Tu programa debe continuamente procesar los mensajes que le llegan del sistema operativo para que sea posible que el evento OnTimer se ejecute. En una aplicación típica con permanente disponibilidad de la interfaz de usuario para que éste interactúe con ella no hay de qué preocuparse (el objeto Application se encarga del procesamiento de los mensajes). No obstante, si tu aplicación ejecuta en algún momento un bloque de instrucciones que demore un tiempo considerable, durante ese lapso no se procesarán los mensajes (y por tanto tampoco se ejecutará el evento OnTimer). Esto lo puedes resolver haciendo que dicho bloque de código contenga continuas llamadas al método Application.ProcessMessages (sobre el cual encontrarás mucho material en este foro). Hay ocasiones en que lo anterior no es posible, debido a que la demora se localiza en código ajeno (en una DLL, en el motor de base de datos, en un componente que no podemos modificar, etc.). Entonces se suele optar por la creación de un hilo alterno, los cuales se ejecutan de manera simultánea con el hilo principal y sin depender de que éste procese o no los mensajes. Si gustas indagar más, aquí se explican varias cosas interesantes relacionadas con el tema. Un abrazo temporizado. Al González. Última edición por Al González fecha: 24-05-2011 a las 08:14:58. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Chat interno | rruffino | Internet | 4 | 08-11-2010 13:02:20 |
Ejecutable Interno | maco2007 | Varios | 6 | 21-10-2007 21:28:30 |
Buscador interno de una web | sarroyab | PHP | 3 | 11-10-2007 16:50:13 |
Buscador interno de una web | sarroyab | PHP | 1 | 05-10-2007 07:57:37 |
correo interno en win2003 server | Giniromero | Windows | 0 | 02-03-2005 12:33:27 |
|