AGB  ·  Datenschutz  ·  Impressum  







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

Timer langsamer als Timer ?

Ein Thema von MaToBe · begonnen am 17. Nov 2008 · letzter Beitrag vom 18. Nov 2008
Antwort Antwort
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Timer langsamer als Timer ?

  Alt 17. Nov 2008, 22:44
Hallo, ich bins mal wieder

Folgendes Problem:

Ich habe einen Timer, der zählt die Zeit, bis das nächste Bild angezeigt wird.
Ein zeiter Timer rechnet mit dieser Zeit und steuert die ProgressBar.

Timer 1 für die Bilder:
Delphi-Quellcode:
procedure TForm1.tZeitTimer(Sender: TObject);
var
  AuswahlBild : string;
  AuswahlNummer : integer;
begin
    repeat
        AuswahlNummer := Random(clbBilder.Count);
    until clbBilder.Checked[AuswahlNummer] = true;
    AuswahlBild := sgDaten.Cells[2,AuswahlNummer];
    ChangeWallpaper(AuswahlBild);
end;
Timer 2 für die ProgressBar:
Delphi-Quellcode:
procedure TForm1.tProgressBarTimer(Sender: TObject);
begin
   if pgbZeit.Position = pgbZeit.Max then
   begin
      p := 0;
      pgbZeit.Position := p;
   end
   else
      begin
         p := p + 100;
         pgbZeit.Position := p;
      end;
end;
Aufgerufen werden beite gleichzeitig hier:
Delphi-Quellcode:
procedure TForm1.btnStartClick(Sender: TObject);
begin
    if cbZeit.Checked = true then
    begin
         if edtZeit.Text <> 'then
         begin
            lbStatus.Caption := 'Aktiv';
            lbStatus.Font.Color := clLime;
            tZeit.Interval := (strtoint(edtZeit.Text)*1000);
            pgbZeit.Max := (strtoint(edtZeit.Text)*1000);
            p := 0;
            tProgressBar.Enabled := true;
            tZeit.Enabled := true
         end
         else ShowMessage ('Sie haben keine Zeit eingegeben.');
    end;
end;
Frage: Warum geschieht der Bildwechsel immer viel früher als das die ProgressBar am Ende ankommt?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Timer langsamer als Timer ?

  Alt 17. Nov 2008, 22:46
Timer sind nicht genau. Anstatt im Interval immer eine Konstante zu addieren, solltest Du lieber die zeitliche Differenz zu einem Startwert verwenden.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#3

Re: Timer langsamer als Timer ?

  Alt 17. Nov 2008, 23:01
und das geht mit der funktion
GetTickCount ("Retrieves the number of milliseconds that have elapsed since the system was started.")
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#4

Re: Timer langsamer als Timer ?

  Alt 17. Nov 2008, 23:17
mmh also ich glaube (nicht wissend) das ich verstanden habe was ihr mit "zeitliche Differenz zum Startwert" meint.

Allerdings hab ich keine Ahung wie genau man das jetzt umsetzt.

Also ich soll mit GetTickCount immer mein P vergrößern?
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Timer langsamer als Timer ?

  Alt 17. Nov 2008, 23:38
du holst du zu Beginn den Startwert mit GetTickCount (Variable1). Wenn du später im Timer wieder die Zeit mit GetTickCount aufrufst (Variable2) kannst du die vergangene Zeit in Millisekunden mit Variable2 - Variable1 berechnen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#6

Re: Timer langsamer als Timer ?

  Alt 17. Nov 2008, 23:41
war ich wohl zu langsam. ich lass dne beitrag mal trotzdem drin wegen dem codeschnipsel

du weist am "anfang" einer variablen den rückgabewert von GetTickCount zu.

danach kannst du, indem du den aktullen GetTickCOuntWert abziehst die vergangende Zeit in millisekunden erhalten:

Delphi-Quellcode:
var
  a: DWord;
begin
  a:=GetTickCount;
  [...CODE...]
  Showmessage('Es sind ' + IntToStr(GetTickCount - a) + ' ms vergangen...)
end;
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Timer langsamer als Timer ?

  Alt 18. Nov 2008, 01:05
Warum denn nicht so?
Delphi-Quellcode:
procedure TForm1.tGlobalTimerTimer(Sender: TObject);
var
  AuswahlBild : string;
  AuswahlNummer : integer;
begin
  if pgbZeit.Position = pgbZeit.Max
  then
    begin

      // Bild austauschen

      repeat
        AuswahlNummer := Random( clbBilder.Count );
      until clbBilder.Checked[ AuswahlNummer ] = true; // <--- das = true kannst du dir hier sparen
      AuswahlBild := sgDaten.Cells[ 2, AuswahlNummer ];
      ChangeWallpaper( AuswahlBild );

      // ProgressBar zurücksetzen

      p := 0;
      pgbZeit.Position := p;
    end
  else
    begin
      p := p + 100;
      pgbZeit.Position := p;
    end;
end;
Dann hast du nur einen Timer und die Wechsel sind absolut synchron mit der ProgressBar.
Da kann es Dir auch egal sein, wie falsch der Timer geht

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#8

Re: Timer langsamer als Timer ?

  Alt 18. Nov 2008, 15:18
wow cool stimmt warum komm ich auf sowas nicht

ja mit dem timer ist es egal den keinem fällt auf ob das Bild jetzt 1 Sekunde früher oder später wechselt bei einer durchschnittlichen Dauer von 5 Minuten

Danke auch fürs verbessern von den Schöhnheitsfehlern =)

MFG MaToBe
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

Re: Timer langsamer als Timer ?

  Alt 18. Nov 2008, 15:32
you're welcome
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 22:36 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