![]() |
mein Timer
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Folgender Code ist der Aufruf-Testcode:
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.
Delphi-Quellcode:
Angehängt habe ich noch die kompletten Sources für Delphi (win32)
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. |
Re: mein Timer
der TryExcept Block in der DoEvent-Routine könnte Probleme machen. Du fängst einfach alle Fehler ab und schmeißt sie in den Müll.
Außerdem ist der Timer nie genau. Denn zu deinem Intervall wird immer die Laufzeit des Events addiert. |
Re: mein Timer
das mit dem try except stimmt. mach ich raus
das die laufzeit addiert wird, weis ich (ist so gewollt) |
Re: mein Timer
//nachtrag
mein timer funzt ja eigentlich wie der echte TTimer, da ja folgender code:
Delphi-Quellcode:
den TTimer auch anhält ?!
if label1.Caption = '1' then label1.Caption := '2' else label1.Caption := '1';
sleep(20000); kommt aufs selbe raus wenn ich den code in meinen timer eintrage. oder hat da jemand was anderes rausbekommen eventuell? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz