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 = '
1'
then label1.Caption := '
2'
else 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)
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!