Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-07-2006
Avatar de Wonni
Wonni Wonni is offline
Miembro
 
Registrado: abr 2006
Posts: 261
Poder: 19
Wonni Va por buen camino
GetTickCount vs. TTimer

Hola

Tengo el libro de los tomos de Delphi: "Nucleo del Api Win32" y en el capitulo 15 ( Funciones de temporización ) trae un ejemplo de como emular un temporizador. El ejemplo muestra un label parpadeando. El caso es que yo pense que tratando con el Api ( tal y como dice el libro ) se consigue una mejor ejecucion del programa, consumir menos recursos. Pues resulta que construyo el programita con dos opciones:

1ª - Mostrar el label parpadeando con un TTimer y
2ª - Mostrar el label parpadeando con el codigo que trae el libro utilizando GetTickCount.

Cuando ejecuto el programa con el TTimer, voy al monitor del sistema y el uso de CPU no sube nunca del 1 %

Cuando ejecuto el programa con GetTickCount, el uso de CPU no se mueve del 100 % !!!!

¿como es posible? se supone que deberia ser mas liviano.

Este es el codigo completo:

Código Delphi [-]
unit Principal;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
type
  TFormPrincipal = class(TForm)
    BotonIniciarConGet: TButton;
    LabelDelphi: TLabel;
    BotonDetenerGet: TButton;
    BotonIniciarConTTimer: TButton;
    BotonDetenerTTimer: TButton;
    TimerParpadeo: TTimer;
    procedure BotonIniciarConGetClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BotonDetenerGetClick(Sender: TObject);
    procedure BotonIniciarConTTimerClick(Sender: TObject);
    procedure BotonDetenerTTimerClick(Sender: TObject);
    procedure TimerParpadeoTimer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  FormPrincipal: TFormPrincipal;
  Running: Boolean;     // variable de control del bucle

implementation
{$R *.dfm}
Procedure Timerando;
Begin
End;
Procedure FlashLoop;
Var
 StartTick: DWORD;   // Hora de inicio
Begin
 //Obtener la hora actual
 StartTick := GetTickCount;
 //Si el bucle continua...
 While Running Do
  Begin
   //...si ha trasncurrido un segundo
   If (GetTickCount - StartTick) > 1000 Then
    Begin
     //...actualizar etiqueta
     FormPrincipal.LabelDelphi.Visible := not FormPrincipal.LabelDelphi.Visible;
     //Reinicializar hora de inicio para siguiente iteracion
     StartTick := GetTickCount;
    End;
   // Necesario para que el bucle no "bloquee" la maquina
   Application.ProcessMessages; 
  End;
End;
procedure TFormPrincipal.BotonIniciarConGetClick(Sender: TObject);
begin
 //Inicializar variable de control...
 Running := TRUE;
 //... y lanzar el bucle
 FlashLoop;
end;
procedure TFormPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Running := FALSE;
 TimerParpadeo.Enabled := FALSE;
end;
procedure TFormPrincipal.BotonDetenerGetClick(Sender: TObject);
begin
 Running := FALSE;
end;
procedure TFormPrincipal.BotonIniciarConTTimerClick(Sender: TObject);
begin
 TimerParpadeo.Enabled := TRUE;
end;
procedure TFormPrincipal.BotonDetenerTTimerClick(Sender: TObject);
begin
 TimerParpadeo.Enabled := FALSE;
end;
procedure TFormPrincipal.TimerParpadeoTimer(Sender: TObject);
begin
 FormPrincipal.LabelDelphi.Visible := not FormPrincipal.LabelDelphi.Visible;
end;
end.

Saludos !!
Responder Con Cita
 



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
Ttimer en un Unit douguiehm Varios 4 22-07-2005 18:16:04
Imagenes con Ttimer zugazua2001 Gráficos 3 04-06-2005 23:00:53
Hilos y TTimer... Elfoscuro Varios 8 08-04-2005 10:18:07
Problemas con Ttimer ¡¡¡ elbilla Varios 2 21-09-2004 10:12:41
Manejo de un Ttimer miguel_fr OOP 3 21-06-2004 20:25:26


La franja horaria es GMT +2. Ahora son las 01:31:21.


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