AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

mein Timer

Ein Thema von supermuckl · begonnen am 13. Okt 2005 · letzter Beitrag vom 13. Okt 2005
Antwort Antwort
supermuckl

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

mein Timer

  Alt 13. Okt 2005, 11: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
Benutzerbild von MarcoWarm
MarcoWarm

Registriert seit: 10. Sep 2003
Ort: Großhennersdorf
532 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: mein Timer

  Alt 13. Okt 2005, 11:16
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.
Marco Warm
TUO
TheUnknownOnes.net
  Mit Zitat antworten Zitat
supermuckl

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

Re: mein Timer

  Alt 13. Okt 2005, 11:27
das mit dem try except stimmt. mach ich raus

das die laufzeit addiert wird, weis ich (ist so gewollt)
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
supermuckl

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

Re: mein Timer

  Alt 13. Okt 2005, 13:05
//nachtrag

mein timer funzt ja eigentlich wie der echte TTimer, da ja folgender code:

Delphi-Quellcode:
if label1.Caption = '1then label1.Caption := '2else label1.Caption := '1';
sleep(20000);
den TTimer auch anhält ?!

kommt aufs selbe raus wenn ich den code in meinen timer eintrage.
oder hat da jemand was anderes rausbekommen eventuell?
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz