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
 
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
 


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 08:27 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