Thema: mein Timer

Einzelnen Beitrag anzeigen

supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#1

mein Timer

  Alt 13. Okt 2005, 12:07
Hi.
Ich habe unter Kylix das Bedürfniss gehabt, einen Timer ohne die System libs laufen zu lassen.
Nach ein paar Überlegungen hab ich mir dann einen Thread gebastelt, den ich jetzt als Timer benutzen kann.

Meine Frage wäre jetzt, ob dieser Code eventuell irgendwo Probleme machen könnte und ich etwas übersehen habe, oder wo man noch etwas verbessern könnte.
Wenn es final ist, darf es in die Codelib.

//edit
timercode geändert
sourcen neu geuppt

Folgender Code beinhaltet den Thread (Timer):

Delphi-Quellcode:
unit mt;

interface

uses
  Classes,SysUtils;

type TOnMuTimer = procedure of object;

type
  Tmuckltimer = class(TThread)
  private

  protected
  interv: integer;
  Evnt: TOnMuTimer;
    procedure Execute; override;
    procedure DoEvent;
    public
    constructor Create(Suspended:boolean;OnMuTimer:TOnMuTimer;Interval:integer);
  end;

implementation

constructor Tmuckltimer.Create(Suspended:boolean;OnMuTimer:TOnMuTimer;Interval:integer);
begin
Evnt := OnMuTimer;
self.FreeOnTerminate := true;
interv := interval;
inherited Create(suspended);
end;

procedure Tmuckltimer.Execute;
begin
  while not self.Terminated do begin
   sleep(interv);
   if not self.terminated then synchronize(DoEvent);
  end;
end;

procedure Tmuckltimer.DoEvent;
begin
    if Assigned(Evnt) then Evnt;
end;

end.
Folgender Code ist der Aufruf-Testcode:


Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    procedure bla;
  end;

var
  Form1: TForm1;
  mu:Tmuckltimer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 mu := Tmuckltimer.Create(true,bla,1000);
 mu.Resume;
end;

procedure Tform1.bla;
begin
if label1.Caption = '1then label1.Caption := '2else label1.Caption := '1';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
mu.Terminate;
end;

end.
Angehängt habe ich noch die kompletten Sources für Delphi (win32)
Angehängte Dateien
Dateityp: zip tmutimer_903.zip (200,4 KB, 4x aufgerufen)
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat