Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit dem Timer!? (https://www.delphipraxis.net/2167-problem-mit-dem-timer.html)

fedderle 10. Jan 2003 11:34


Problem mit dem Timer!?
 
Hi!

Hab ein Problem mit einem Timer.
Ich lasse vier Labels alle 100 ms mit Hilfe von einem Timer um zwei Pixel nach unten verschieben!

Das Funktioniert auf meinem Athlon 650 ohne Probleme! Aber auf nem 2 Ghz Rechner bewegen sich die Labels um einiges langsamer! Gleiches Problem auch bei einem 750 Mhz Rechner!

Woran kann das liegen? Brauch dringend Hilfe. Das muss bis Montag funktionieren! Brauch es für die Schule!


Steffen!

lodda 10. Jan 2003 11:46

Schau mal nach welche Programme auf den verschiedenen Rechnern im Hintergrund laufen, denn Timerbotschaften haben die eine sehr niedrige Priorität. Wenn viele Anwendungen im Hintergrung laufen, dann kann es sein das einige Timerbotschaften einfach ignoriert werden.

fedderle 10. Jan 2003 14:39

Das habe ich schon ausprobiert. Auf dem 750 Mhz Rechner hab ich alle Progs im Hintergund geschlossen! Das problem war trotzdem da. Ich hab auch das ganze Programm vor dem Start mal in den Arbeitsspeicher geladen (Mit irgend so nem Tool). Das hat aber auch nicht geholfen.
Am Betriebssystem kann es auch nicht liegen. Ist bei allen Rechnern Windows XP Professionell drauf. Bei mir laufen im Hintergrund mehr Programme als es bei dem 750er normalerweise der Fall ist! Trotzdem funktioniert das ganze nur bei mir.

Hat jemand sonst noch irgend ne Idee woran es liegen könnte! Und falls es doch irgendwie was mit der Priorität zu tun hat wie lodda meint. Kann ich dagegen dann irgendetwas machen außer zu versuchen Programme im Hintergrund zu schließen. Immerhin kann ich das ja nicht auf jedem Rechner vorher machen bzw. machen lassen.

Steffen

Christian Seehase 10. Jan 2003 14:42

Moin fedderle,

wie sieht's denn mit dem Speicherausbau auf den verschiedenen Rechnern aus?

fedderle 10. Jan 2003 14:46

Tach Chris!

Also!

650er hat 192 MB.
750er hat 512 MB.
2 Ghz hat 256 MB.

Die haben also beide mehr Arbeitsspeicher als ich auf meinem!

lodda 10. Jan 2003 14:53

hallo fedderle

Compilierst du das Programm auf allen Rechnern neu oder kopierst du es einfach auf die anderen Rechner?

fedderle 10. Jan 2003 15:00

Noch ein andres Problem mit dem Timer
 
Da fällt mir grad noch was ein!

Habe im gleichen Programm noch ein andres Problem mit dem Timer.

Also es handelt sich um ne Art kleine Demo, in der sich verschiedene Labels zu einer Hintergrundmusik bewegen. Also müssen diese Labels sich manchmal auf 100ms genau bewegen oder verschwinden o.ä.

Da das Lied sehr lang ist. 7 Minuten habe ich bei der Programmierung die Mp3 Datei in einzelne Stücke geschrieben und dann die einzelenen Teile des Programmcodes zusammengefügt. Und genau an diesen Stellen, wo ich das Programm zusammengefügt habe, hab ich nun folgendes Problem.

Wenn ich Delphi im Hintergund laufen lasse und den Timer dann einstelle, damit der nächste Teil wieder synchron zur Musik ist, dann stimmt der Zeitabstand auch nur so lange, bis ich Delphi wieder schließe. Also wenn ich die Exe-Datei einfach alleine öffne ist genau an diesen Stellen dann eine Verzögerung im Programm. Aber nur bei einem von den zwei Timern, die ich verwende. (Oder sollte man keine zwei Timer verwenden? :) ) bei den restlichen Pausen, die ich mit dem Timer erzeuge, tritt das Problem nicht auf.

Kann mir da jemand helfen?

Steffen!

fedderle 10. Jan 2003 15:05

Hi lodda!


Zitat:

Zitat von lodda
hallo fedderle

Compilierst du das Programm auf allen Rechnern neu oder kopierst du es einfach auf die anderen Rechner?

Also ich hatte das Programm Compiliert aber auch mit den Delphidateien in ein selbstextrahierendes Ace-Archiv gepackt. Bei dem 750 Mhz Rechner hab ich nachdem es nicht synchron zur Musik war neu compiliert. Der Fehler trat erst ca. 15 Sekunden später auf.

Steffen!

lodda 10. Jan 2003 15:20

Schick mir mal die wichtigen Teile von deinem Programm.Vielleicht kann ich dann erkennen wo das Problem liegt.

fedderle 10. Jan 2003 17:45

Zitat:

Zitat von lodda
Schick mir mal die wichtigen Teile von deinem Programm.

Also Hier ist ein Auszug aus dem Programm!!

On Create von der Form "FormCredits":
Delphi-Quellcode:
procedure TFormCredits.FormCreate(Sender: TObject);
begin
   AssignFile(schrift, 'lauf.ste');
   Reset(schrift);
   randomize;
   k := 0;
   j := 0;
   i := 0;
   m := 0;
   n := 0;
   XLabel := -1;
   XLabel2 := -1;
   FormCredits.Player.play;
   FormCredits.TimerLabel1.Enabled := true;
   FormCredits.TimerLabel2.Enabled := true
end;
Auszug aus der Prozedur des ersten von den beiden Timer:
Delphi-Quellcode:
procedure TFormCredits.TimerLabel1Timer(Sender: TObject);
var l, o, p : integer;
begin
  Inc(XLabel);
   case XLabel of

...


     46: FormCredits.Label2.Caption := 'Patrick B    ';
     47: FormCredits.Label2.Caption := 'Patric       ';
     48: FormCredits.Label2.Caption := 'Pat          ';
     49: begin FormCredits.Label2.Visible := false;
                FormCredits.TimerLabel1.Interval := 300;
                if i >= 3 then begin XLabel := 54;
                                     i := 0;
                                     FormCredits.TimerLabel1.Interval := 100
                               end
          end;
     50: begin FormCredits.Label1.Visible := true;
                FormCredits.Label2.Visible := true;
                FormCredits.TimerLabel1.Interval := 100
          end;
     51: FormCredits.Label2.Caption := 'Patric       ';
     52: FormCredits.Label2.Caption := 'Patrick B    ';
     53: FormCredits.Label2.Caption := 'Patrick Bor  ';
     54: begin FormCredits.Label2.Caption := 'Patrick Borsch';
                FormCredits.TimerLabel1.Interval := 1600;
                if i <= 2 then begin XLabel := 44;
                                     Inc(i)
                               end
          end;
     55: begin FormCredits.ImageBack.Picture.LoadFromFile('Bilder\Bild2.jpg');
                FormCredits.TimerLabel1.Interval := 100
          end;
     56: begin FormCredits.Label4.Top := -15;
                FormCredits.Label4.Visible := true;
                FormCredits.Label3.Top := -75;
                FormCredits.Label3.Visible := true;
                FormCredits.Label2.Caption := 'Patrick Borsch';
                FormCredits.Label2.Top := -135;
                FormCredits.Label2.Visible := true;
                FormCredits.Label1.Caption := 'Idee';
                FormCredits.Label1.Top := -205;
                FormCredits.Label1.Visible := true;
                FormCredits.TimerLabel1.Interval := 1
          end;
     57: begin FormCredits.Label4.Top := FormCredits.Label4.Top + 2;
                FormCredits.Label3.Top := FormCredits.Label3.Top + 2;
                FormCredits.Label2.Top := FormCredits.Label2.Top + 2;
                FormCredits.Label1.Top := FormCredits.Label1.Top + 2;
                FormCredits.TimerLabel1.Interval := 5;
                Inc(i);
                if i < 370 then XLabel := 56 else i := 0
          end;
     58: begin FormCredits.Label4.Top := FormCredits.Label4.Top - 2;
                FormCredits.Label3.Top := FormCredits.Label3.Top - 2;
                FormCredits.Label2.Top := FormCredits.Label2.Top - 2;
                FormCredits.Label1.Top := FormCredits.Label1.Top - 2;
                Inc(i);
                if i < 180 then XLabel := 57 else begin i := 0;
                                                        FormCredits.TimerLabel1.Interval := 100
                                                  end
          end;
     59: begin FormCredits.Label1.Font.Color := clred;
                FormCredits.Label2.Font.Color := clblue;
                FormCredits.Label3.Font.Color := clgreen;
                FormCredits.Label4.Font.Color := clyellow
          end;
     60: begin FormCredits.Label1.Font.Color := clred;
                FormCredits.Label2.Font.Color := clyellow;
                FormCredits.Label3.Font.Color := clblue;
                FormCredits.Label4.Font.Color := clgreen
          end;
     61: begin FormCredits.Label1.Font.Color := clred;
                FormCredits.Label2.Font.Color := clgreen;
                FormCredits.Label3.Font.Color := clyellow;
                FormCredits.Label4.Font.Color := clblue;
                Inc(i);
                if i <= 36 then XLabel := 58 else i := 0
          end;
     62: begin FormCredits.Label1.Visible := false;
               FormCredits.Label2.Visible := false;
               FormCredits.Label3.Visible := false;
               FormCredits.Label4.Visible := false;
               FormCredits.Label1.Top := FormCredits.Label1.Top + 20;
               FormCredits.TimerLabel1.Interval := 1500
         end;
     63: begin FormCredits.Label5.Caption := 'Musikauswahl';
               FormCredits.Label6.Caption := 'und';
               FormCredits.Label7.Caption := 'Musikschnitt';
               FormCredits.Label5.Font.Size := 30;
               FormCredits.Label6.Font.Size := 20;
               FormCredits.Label7.Font.Size := 30;

               FormCredits.TimerLabel1.Interval := 1
         end;


...


   else exit end
end;
Steffen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:48 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