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
public
end;
var
FormPrincipal: TFormPrincipal;
Running: Boolean;
implementation
{$R *.dfm}
Procedure Timerando;
Begin
End;
Procedure FlashLoop;
Var
StartTick: DWORD; Begin
StartTick := GetTickCount;
While Running Do
Begin
If (GetTickCount - StartTick) > 1000 Then
Begin
FormPrincipal.LabelDelphi.Visible := not FormPrincipal.LabelDelphi.Visible;
StartTick := GetTickCount;
End;
Application.ProcessMessages;
End;
End;
procedure TFormPrincipal.BotonIniciarConGetClick(Sender: TObject);
begin
Running := TRUE;
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 !!