AGB  ·  Datenschutz  ·  Impressum  







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

Timer Verständnisfrage

Ein Thema von Alois · begonnen am 31. Okt 2009 · letzter Beitrag vom 31. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Timer Verständnisfrage

  Alt 31. Okt 2009, 17:24
Hi,

Ich benutze in meinem Projekt einen Timer mit einem Intervall von 100ms.
Warume werden die einzelnen case-Anweisungen nicht durchlaufen?

Warum funktioniert folgender Code nicht?

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Interval: integer;
begin
  if Interval > 10 then Interval := 1;
  case Interval of
   2, 4, 6, 8 : begin
     // alle 200ms
   end;
   5: begin
     // alle 500ms
   end;
   10 : begin
     // alle 1000ms
   end;
  end;
  Interval := Interval + 1;
end;
Gruss Alois
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:26
Weil Interval bei dir eine lokale Variable ist.
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:37
Zitat von omata:
Weil Interval bei dir eine lokale Variable ist.
Ist mir schon klar. Das hat nichts mit dem Timer1.Interval zu tun.

Ich habs zum besseren Verständnis hier nochmal geändert:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ZeitInterval: integer;
begin
  if ZeitInterval > 10 then ZeitInterval := 1;
  case ZeitInterval of
   2, 4, 6, 8 : begin
     // alle 200ms
   end;
   5: begin
     // alle 500ms
   end;
   10 : begin
     // alle 1000ms
   end;
  end;
  ZeitInterval := ZeitInterval + 1;
Timer1.Interval ist im Design-Form auf 100 eingestellt und der der Timer wird mit Timer1.Enabled = true auch gestartet.

Der Wert ZeitInterval wird als Zähler benutzt, aber die einzelnen case-Abschnitte werden nicht durchlaufen.

Gruss Alois
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#4

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:39
Was omata meinte ist, dass lokale Variablen nicht initialisiert werden, Du also nicht wissen kannst, was dort drin steht.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:42
.. wenn Du die lokale Variable hochzählst bringt das nicht viel.
Sie ist bei Dir jedesmal wenn die Timerfunktion ausgeführt wird undefiniert.

Eine externe Variable ( Klassen variable) würde Dir hier helfen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:43
Genau, die lokale Variable lebt nur so lange wie die Timer-Prozedur ausgeführt wird, wird sie ein zweites Mal aufgerufen ist das eine neue lokale Variable und sie enthält nicht den Wert, den du ihr zuvor mal zugewiesen hast.
  Mit Zitat antworten Zitat
Alois

Registriert seit: 23. Jul 2005
71 Beiträge
 
Delphi 10 Seattle Professional
 
#7

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:45
Zitat von DeddyH:
Was omata meinte ist, dass lokale Variablen nicht initialisiert werden, Du also nicht wissen kannst, was dort drin steht.
Ah jetzt ja... eben hat's geklingelt. Vielen Dank euch beide.

Gruss Alois
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:45
Auf gut Deutsch

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  ZeitInterval: integer;
begin
 // ZeitInterval ist hier an der Stelle 0
  if ZeitInterval > 10 then ZeitInterval := 1;
  case ZeitInterval of
   2, 4, 6, 8 : begin
     // alle 200ms
   end;
   5: begin
     // alle 500ms
   end;
   10 : begin
     // alle 1000ms
   end;
  end;
  ZeitInterval := ZeitInterval + 1;
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:49
Eine nicht initialisierte Variable ist nicht Null, sie ist undefiniert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#10

Re: Timer Verständnisfrage

  Alt 31. Okt 2009, 17:54
Zitat:
// ZeitInterval ist hier an der Stelle 0
NEIN
lokale Variablen werden nicht intitialisiert


Was man hier auch verwenden könnte, das wäre .Tag

[add]
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Timer1.Tag > 10 then Timer1.Tag := 1;
  case Timer1.Tag of
    ...
  end;
  Timer1.Tag := Timer1.Tag + 1;
end;

// oder besser (dieses ist unabhängig vom Timer-Namen)

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if TTimer(Sender).Tag > 10 then TTimer(Sender).Tag := 1;
  case TTimer(Sender).Tag of
    ...
  end;
  TTimer(Sender).Tag := TTimer(Sender).Tag + 1;
end;
$2B or not $2B
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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