AGB  ·  Datenschutz  ·  Impressum  







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

GetTickCount

Ein Thema von ontorius · begonnen am 18. Mär 2006 · letzter Beitrag vom 20. Mär 2006
Antwort Antwort
Seite 1 von 3  1 23      
ontorius

Registriert seit: 11. Jan 2006
17 Beiträge
 
#1

GetTickCount

  Alt 18. Mär 2006, 22:22
Ich habe folgendes geschrieben:

Delphi-Quellcode:
procedure TForm1.trash;
var start:longint;
    i:integer;
begin
  repeat
    start:=gettickcount;
    if start+50=gettickcount then image4.picture.LoadFromFile('.\pics\trash_open1.bmp');
    if start+100=gettickcount then image4.Picture.loadfromfile('.\pics\trash_open2.bmp');
    if start+150=gettickcount then image4.Picture.LoadFromFile('.\pics\trash_blum.bmp');
    if start+2150=gettickcount then image4.Picture.loadfromfile('.\pics\trash.bmp');
    inc(i);
  until i=10;
end;
An der Stelle wo das Programm die oben genannte Prozedur aufruft, bleibt es einfach stehen und man kann darin nichts mehr machen. Wie muss man mit "GettickCount" umgehen?
Ich will ein Sloganizer Banner haben. Punkt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: GetTickCount

  Alt 18. Mär 2006, 22:23
Wie wäre es, wenn du statt dem = ein <= nimmst? So wie es jetzt ist, geht das nur, wenn der Computer es exakt in der richtigen Millisekunde schafft.

EDIT: Der Fehler liegt noch wo ganz anders. Du musst es so machen:

Delphi-Quellcode:
procedure TForm1.trash;
var start:longint;
    i:integer;
begin
  repeat
    start:=gettickcount;
    repeat Application.ProcessMessages until GetTickCount>=start+50;
    image4.picture.LoadFromFile('.\pics\trash_open1.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+100;
    image4.Picture.loadfromfile('.\pics\trash_open2.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+150;
    image4.Picture.LoadFromFile('.\pics\trash_blum.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+250;
    image4.Picture.loadfromfile('.\pics\trash.bmp');
    inc(i);
  until i=10;
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
ontorius

Registriert seit: 11. Jan 2006
17 Beiträge
 
#3

Re: GetTickCount

  Alt 18. Mär 2006, 22:36
Zitat von 3_of_8:
Wie wäre es, wenn du statt dem = ein <= nimmst? So wie es jetzt ist, geht das nur, wenn der Computer es exakt in der richtigen Millisekunde schafft.

EDIT: Der Fehler liegt noch wo ganz anders. Du musst es so machen:

Delphi-Quellcode:
procedure TForm1.trash;
var start:longint;
    i:integer;
begin
  repeat
    start:=gettickcount;
    repeat Application.ProcessMessages until GetTickCount>=start+50;
    image4.picture.LoadFromFile('.\pics\trash_open1.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+100;
    image4.Picture.loadfromfile('.\pics\trash_open2.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+150;
    image4.Picture.LoadFromFile('.\pics\trash_blum.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+250;
    image4.Picture.loadfromfile('.\pics\trash.bmp');
    inc(i);
  until i=10;
end;
Was ist "Application.ProcessMessages"? Ich will versuchen, möglichst ohne dass das Programm aussetzt, dass die Bilder nach einer bestimmten zeit angezeigt werden.
Ich will ein Sloganizer Banner haben. Punkt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: GetTickCount

  Alt 18. Mär 2006, 22:40
Application.ProcessMessages ist in diesem Fall nur ein Füller und heißt so viel wie "nichts tun bis 50 ms um sind."

Da ruckelt absolut gar nix. So wie du das gemacht hast, geht er das durch:

start:=GetTickCount; //also ist start der Anfangswert
if start+50=GetTickCount... //Hier ist höchstens eine Millisekunde vergangen, also ist die Bedingung nicht erfüllt und so geht das auch bei den anderen Bedingungen.

Du musst praktisch WARTEN bis die 50 ms um sind, und das passiert bei meinem Code.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Basilikum

Registriert seit: 9. Aug 2003
389 Beiträge
 
Delphi 7 Professional
 
#5

Re: GetTickCount

  Alt 18. Mär 2006, 22:40
Zitat von ontorius:
Delphi-Quellcode:
procedure TForm1.trash;
var start:longint;
    i:integer;
begin
  repeat
    start:=gettickcount;
    if start+50=gettickcount then image4.picture.LoadFromFile('.\pics\trash_open1.bmp');
    if start+100=gettickcount then image4.Picture.loadfromfile('.\pics\trash_open2.bmp');
    if start+150=gettickcount then image4.Picture.LoadFromFile('.\pics\trash_blum.bmp');
    if start+2150=gettickcount then image4.Picture.loadfromfile('.\pics\trash.bmp');
    inc(i);
  until i=10;
end;
An der Stelle wo das Programm die oben genannte Prozedur aufruft, bleibt es einfach stehen und man kann darin nichts mehr machen. Wie muss man mit "GettickCount" umgehen?
das "Stehenbleiben" hängt vermutlich damit zusammen, dass du i nicht initialisierst.... wenn nun i vor repeat zufälligerweise genau 11 ist, so wird die Schlaufe ca. 4'000'000'000 durchlaufen... und das dauert seine Zeit...
füge mal ein i:=0 vor repeat ein....
  Mit Zitat antworten Zitat
Daniel G
(Gast)

n/a Beiträge
 
#6

Re: GetTickCount

  Alt 18. Mär 2006, 22:43
Zitat von ontorius:
Was ist "Application.ProcessMessages"?
Mit dieser Anweisung verarbeitet eine Anwendung die Nachrichten, die an das Fenster geschickt werden. Auf gut deutsch:

Dat inner Schleife und die Anwendung friert für die Dauer der Schleife nicht ein.

//Edit: roter Kasten, ick vermiss dir..
  Mit Zitat antworten Zitat
ontorius

Registriert seit: 11. Jan 2006
17 Beiträge
 
#7

Re: GetTickCount

  Alt 18. Mär 2006, 22:52
Zitat von Daniel G:
Zitat von ontorius:
Was ist "Application.ProcessMessages"?
Mit dieser Anweisung verarbeitet eine Anwendung die Nachrichten, die an das Fenster geschickt werden. Auf gut deutsch:

Dat inner Schleife und die Anwendung friert für die Dauer der Schleife nicht ein.

//Edit: roter Kasten, ick vermiss dir..
Und ob. Ich habs vorher mit 4 timern ausprobiert, da hats nichts geruckelt. Aber jetzt mit dem "Application.ProcessMessages" kann man das Ruckeln nich mehr übersehn.
Ich will ein Sloganizer Banner haben. Punkt.
  Mit Zitat antworten Zitat
ontorius

Registriert seit: 11. Jan 2006
17 Beiträge
 
#8

Re: GetTickCount

  Alt 18. Mär 2006, 23:05
Zitat von 3_of_8:
Application.ProcessMessages ist in diesem Fall nur ein Füller und heißt so viel wie "nichts tun bis 50 ms um sind."

Da ruckelt absolut gar nix. So wie du das gemacht hast, geht er das durch:

start:=GetTickCount; //also ist start der Anfangswert
if start+50=GetTickCount... //Hier ist höchstens eine Millisekunde vergangen, also ist die Bedingung nicht erfüllt und so geht das auch bei den anderen Bedingungen.

Du musst praktisch WARTEN bis die 50 ms um sind, und das passiert bei meinem Code.
Vielleicht sollte ich noch dazo sagen, dass ich nebenbei noch einen timer habe, der auch einige delays beinhaltet. Können diese in verbindung mit dem gettickcount zu übermäßigen ruckeln führen?
Ich will ein Sloganizer Banner haben. Punkt.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: GetTickCount

  Alt 18. Mär 2006, 23:05
Jetzt tu mir nen Gefallen und benutze diesen Code. Einfach ausprobieren, bevor du mögliche Fehler kritisierst. Nebenbei würde ich die Bilder eher in eine ImageList laden, die Dinger 16 mal in der Sekunde aus der Datei zu laden ist ineffizient.

EDIT: Was meinst du, wie ein Timer funktioniert? Das ist nichts anderes als GetTickCount schön in ne Klasse verpackt.

Delphi-Quellcode:
procedure TForm1.trash;
var start:longint;
    i:integer;
begin
  i:=0;
  repeat
    start:=gettickcount;
    repeat Application.ProcessMessages until GetTickCount>=start+50;
    image4.picture.LoadFromFile('.\pics\trash_open1.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+100;
    image4.Picture.loadfromfile('.\pics\trash_open2.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+150;
    image4.Picture.LoadFromFile('.\pics\trash_blum.bmp');
    repeat Application.ProcessMessages until GetTickCount>=start+250;
    image4.Picture.loadfromfile('.\pics\trash.bmp');
    inc(i);
  until i=10;
end;
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
ontorius

Registriert seit: 11. Jan 2006
17 Beiträge
 
#10

Re: GetTickCount

  Alt 18. Mär 2006, 23:18
Zitat:
Nebenbei würde ich die Bilder eher in eine ImageList laden
Kannst du mir das mit der ImageList erklären?
Den Code hab ich ausprobiert und es ruckelt, das hats bei den 4 timern für jedes bild nich getan.
Ich will ein Sloganizer Banner haben. Punkt.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 10:45 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