Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-05-2011
Avatar de saldanaluis
saldanaluis saldanaluis is offline
Miembro
 
Registrado: nov 2006
Ubicación: Monterrey NL México
Posts: 122
Poder: 18
saldanaluis Va por buen camino
Question 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...
Responder Con Cita
  #2  
Antiguo 24-05-2011
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
Código Delphi [-]
procedure TTimer.UpdateTimer;
begin
  KillTimer(FWindowHandle, 1);
  if (FInterval <> 0) and FEnabled and Assigned(FOnTimer) then
    if SetTimer(FWindowHandle, 1, FInterval, nil) = 0 then
      raise EOutOfResources.Create(SNoTimers);
end;
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 09:23:08.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi