![]() |
GetTickCount Problem
Moin allerseits,
und zwar weißt ich nicht, warum mein GetTickCount Teil im Programm nicht funktioniert. Es wird beim einem ButtonClick der aktuelle GetTickCount-Wert in der integer-Variable "start" gespeichert und diese wird dann vom aktuellen GetTickCount-Wert subtrahiert und falls das Ergebnis = 1000 ms ist, soll die Progressbar 10 Stellen weiter gehen.
Delphi-Quellcode:
.
. . start := GetTickCount; if (GetTickCount-start) = 1000 then begin Progressbar1.Position := 10; end; . . . |
Re: GetTickCount Problem
Delphi-Quellcode:
Progressbar1.StepBy(10);
|
Re: GetTickCount Problem
Danke für die schnelle Antwort,
ändern tuts allerdings auch nichts :( mfG, Nico |
Re: GetTickCount Problem
Delphi-Quellcode:
Was soll der Compiler denn genau machen zwischen diesen beiden Zeilen, was 1 Sekunde dauert? Er macht einfach weiter und braucht bestimmt nicht 1 Sekunde zwischen diesen beiden Zeilen...
start := GetTickCount;
if (GetTickCount-start) = 1000 then |
Re: GetTickCount Problem
Delphi-Quellcode:
setzt deine Position ja immer wieder auf 10.
Progressbar1.Position := 10;
wenn schon dann:
Delphi-Quellcode:
um immer 10 Schritte weiter zu gehen.
Progressbar1.Position := Progressbar1.Position + 10;
|
Re: GetTickCount Problem
Der Unterschied im TickCount wird nie genau 1000 sein. Vergleiche auf Größer Gleich.
|
Re: GetTickCount Problem
Zum einen solltest du nicht auf Gleichheit mit 1000 prüfen, denn du kannst kaum in jeder Millisekunde GetTickCount abfragen. Das eigentliche Problem ist meiner Meinung nach aber, dass du Start ja direkt vor der Abfrage aktualisierst. Und diese Zuweisung dauert sicherlich keine Sekunde.
|
Re: GetTickCount Problem
Eigendlich möchte ich mit GetTickCount
erreichen, dass mein Programm alle ...ms die Progressbar "erweitert", sprich die "Installation" vorangeht. Ja ich weiß, dass es das jetzt noch nicht kann, also der Endlosvorgang, aber dies war erstmal zu Testzwecken, um zu gucken, ob er überhaupt nach 1000ms, sprich 1s etwas tut und dies war leider nicht der Fall. mfG, Nico |
Re: GetTickCount Problem
Delphi-Quellcode:
start := GetTickCount;
... var msecs : integer; begin msecs := GetTickCount-start; ProgressBar1.Position := (msecs div 1000) * 10; |
Re: GetTickCount Problem
Der Code wird einmalig abgearbeitet und dann ist gut. Wieso sollte er denn urplötzlich diesen Code wieder durchlaufen?
|
Re: GetTickCount Problem
Ja, das der Code BIS JETZT nur einmal
abgearbeitet wird ist mir bewusst, da dies ja ersteinmal ein Test sein sollte, ob es überhaupt funktioniert. Edit: @shmia, der Code klappt auch nicht :( |
Re: GetTickCount Problem
Zitat:
Zitat:
|
Re: GetTickCount Problem
Nein, das habe ich in einer anderen Prozedur gepackt
mfG, Nico |
Re: GetTickCount Problem
Und wann wird die ausgeführt? Was sagt der Debugger? Kommt er zu der Stelle wo du die Progressbar veränderst? Wie sind die Werte bei der Abfrage? Du hast alles in deinem Delphi da um das Problem selber zu lösen, also nutze die wirklich vielfältigen Möglichkeiten des Debuggers von Delphi.
|
Re: GetTickCount Problem
Ja ich habe wirklich vorher
schon verdammt lange dran gesessen und immer hin und her getüfftelt, weil das mit GetTickCount nicht so geklappt hat, wie ich will. Im Prinzip soll es ja nur wie ein Timer funktionieren, welcher nicht im Sekunden-Takt, sondern schneller aktualisiert. Ich hoffe Ihr wisst jetzt was ich meine :coder2: mfg, Nico |
Re: GetTickCount Problem
Sorry, aber stehst du auf dem Schlauch? Ich hab das Gefühl du drehst dich im Kreis. Ist dir überhaupt klar, was GetTickCount macht und wie du damit Zeitdifferenzen berechnest?
Du hast doch schon den Ansatz gehabt. Was du falsch gemacht hast, hat man dir auch schon paar mal gesagt? |
Re: GetTickCount Problem
Wie meinst du das?
Ich habe ebend nur nochmal kurz versucht zu erläutern, was ich eigendlich mit dem GetTickCOunt vorhabe, weil ich dachte, dass dieses vielleicht zu kompliziert verstanden wurde oder ähnliches. :roll: Edit: Ja, ich glaub das mit GetTickCount habe ich am Anfang wirklich falsch verstanden. Allerdings glaube ich, dass ich es durch Eure Hilfe jetzt richtig verstanden habe und mir is jetzt auch bewusst, das es bis zur Abfrage von dem Vergleich keine Sekunde dauert. Ich habe dies erst so in mein Programm geschrieben, da ich dachte, dass die If-Anweisung solange wartet, bis die Bedingung erfüllt ist, jedoch habe ich nicht berücksichtigt, das dies sich nicht automatisch aktualisiert. Jedoch weiß ich dadurch nicht, wie ich dieses aktualisieren im ms-Takt, bis die Anweisung erfüllt ist, erstellen soll |
Re: GetTickCount Problem
Naja, was soll das? Das ist weder kompliziert noch schwer.
Du brauchst ne Variable (StartTicks) die du irgendwann (FormCreate?) mit GetTickCount initialisierst. Dann brauchst du ne Schleife, die immerwieder GetTickCount abfragt und den Start-Wert davon abzieht. Ergo hast du die Differenz in Millisekunden. Wenn dein Zielwert (1000ms = 1s) erreicht ist (auf >= (größer-gleich) und nicht nur = prüfen!), machst du das was du machen willst und setzt die StartTicks-Variable wieder mit GetTickCount, um den aktuellen Zeitwert festzuhalten und die nächsten 1000ms abzuwarten. |
Re: GetTickCount Problem
Probiers mal so
Delphi-Quellcode:
var start:Dword;
begin start := gettickcount; // Startzeit merken while true do // zum test mal ne Endlosschleife begin if gettickcount - start >= 1000 then //1 Sekunde abwarten begin Progressbar1.StepBy(10); // um 10 weitergehen start := gettickcount; // neue Zeit merken end; end; |
Re: GetTickCount Problem
@Nuclear-Ping Sorry ,dass ich Euch soviele Nerven gekostet habe :oops:
aber ich bin mir jetzt sicher, das ich es so, wie du es schließlich noch einmal formuliert hast verstanden habe :-D Danke an alle mfG, Nico |
Re: GetTickCount Problem
Delphi-Quellcode:
var
StartTicks, CurTicks: LongInt; begin StartTicks := GetTickCount; repeat CurTicks := GetTickCount; if (CurTicks - StartTicks) >= 1000 then begin StartTicks := GetTickCount; // <- reset ShowMessage ('1000ms vorbei'); end; until FALSE; end; |
Re: GetTickCount Problem
@Noobinator: Dein Code wird aber wohl keine Änderung in der Progressbar anzeigen, da diese nicht zum malen kommt.
@MrMyagi: Ich warte immernoch auf Antwort zu meine Frage zum Debugger... |
Re: GetTickCount Problem
@Muetze1 Der Debugger sagt gar nichts, da es zu keinem Fehler etc führt.
Es ist halt nur so, das sich die Progressbar nicht verändert. |
Re: GetTickCount Problem
Zitat:
|
Re: GetTickCount Problem
@Noobinator
Jepp, bei mir klappts so auch^^ |
Re: GetTickCount Problem
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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