Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Timers (https://www.clubdelphi.com/foros/showthread.php?t=20123)

b3nshi 06-04-2005 16:41:03

Timers
 
Creo que la pregunta que voy a hacer para muchos puede parecer demasiado tonta, pero bue... Mi duda es la siguiente. El uso de un timer, quita muchos recursos de sistema???. Y si uso por ejemplo 10 timers en una aplicacion, se va a volver muy pesada???.
Desde ya muchisimas Gracias!

marcoszorrilla 06-04-2005 17:07:23

Como es lógico el hecho de que este todo el tiempo pendiente de los timer le resta recursos, pero si es un programa que solamente tiene esa misión, escuchar puertos, esperar ficheros..... no hay ningún problema, de lo contrario, no hay mejor cosa que hacer una prueba de rendimiento.

¿Se puede saber que piensas hacer con 10 timers?

Un Saludo.

roman 06-04-2005 17:29:39

Cita:

Empezado por marcoszorrilla
¿Se puede saber que piensas hacer con 10 timers?

Esto mismo me pregunto.

Si se desea monitorear los eventos E1, E2, E3,... con periodicidades P1, P2, P3..., tómese el máximo común divisor D = mcd(P1, P2, P3, ...) de las periodicidades y dispóngase un único cronómetro con intervalo igual a P.

Ajústese una variable N que registre el número de incidencias de la ocurrencia del cronómetro.

En cada ciclo del cronómetro tómese el residuo Ri que deja N*D al dividirse por Pi (Ri = N*D mod Pi).

Si Ri es cero significará que el evento Ei ha de señalarse como transcurrido.

:confused:

// Saludos

Lepe 07-04-2005 00:23:28

Roman: ... se supone que eso lo has sacado de tus apuntes de la guardería en la NASA, donde obviamente eras el alumno más aventajado.

Bromas aparte, chapó !!

roman 07-04-2005 00:34:33

¡Qué va hombre!

Faltará además ver si funciona (por algo el smiley no tan sonriente al final del mensaje), más que nada por la imprecisión de un timer.

// Saludos

Al González 07-04-2005 01:48:40

Thread para iteraciones temporizadas
 
¡Buen día a todos!

He leído en diversos lugares (y lo he comprobado) que por lo general es preferible usar un hilo (thread) de ejecución alterno en lugar de un temporizador (timer), cuando se busca una buena precisión de tiempo (hasta de milisegundos) para llevar a cabo la acción temporizada.

Cuando se trata de crear un hilo de ejecución alterno, la ayuda de Delphi aconseja una forma básica de hacerlo, la cual consiste en crear una nueva clase de objeto derivada de TThread, redefiniendo su método Execute para incluir en éste el código que deseamos se ejecute dentro del hilo.

Sin embargo, algunos desarrolladores han expresado su incomodidad por seguir este procedimiento, argumentando que es demasiado código el que hay que escribir sólo para hacer que el programa corra otro hilo en el fondo. Esto depende de la percepción que cada programador tiene en cada circunstancia específica de su trabajo (puede ser un proyecto de entrega urgente, una aplicación con varios hilos alternos, etc.).

Considerando todo lo anterior, hace tiempo me di a la tarea de crear una clase derivada de TThread, la cual llamé TghThread. Tiene la ventaja de que al instanciar un objeto TghThread se pueden indicar como parámetros:

1. El nombre de un método que el hilo deberá ejecutar repetitivamente.
2. El intervalo de tiempo en milisegundos para que, a manera de temporizador preciso, dicho método se ejecute cada cierto tiempo.

Ejemplo:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IGHTareas;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
    HiloReloj :TghThread;  { Hilo de Reloj }
    Procedure Reloj;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

Procedure TForm1.Reloj;
Begin
  Label1.Caption := FormatDateTime ('hh:nn:ss.zzz', Time ());
End;

{ Manejadores de eventos }

procedure TForm1.FormCreate(Sender: TObject);
begin
  { Establecer el método Reloj como procedimiento a ejecutarse cada 20
    milisegundos en un hilo alterno }
  HiloReloj := TghThread.Crear (Reloj, 20);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  HiloReloj.Free;
end;

end.
Como puede observarse, con TghThread no es necesario crear una nueva clase de objeto para establecer un hilo adicional en nuestra aplicación. Puede usarse fácilmente como un temporizador de alta precisión, colocando el método a ejecutar en alguna forma o módulo de datos de nuestro programa. Obviamente este ejemplo de reloj en pantalla, como tal, no tiene mucha aplicación práctica que digamos, pero nos ilustra de manera sencilla lo que podríamos hacer cuando queramos que nuestra aplicación ejecute iterativamente y con alta frecuencia alguna tarea en particular.

TghThread es freeware, incluye los fuentes y forma parte de la biblioteca Interfaz GH para Delphi 7. También pueden solicitármelo directamente, con toda confianza.

Un abrazo a todos.

Al González. :)


La franja horaria es GMT +2. Ahora son las 02:05:31.

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