AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Programm hängt sich wegen SLEEP auf *HILFE*
Thema durchsuchen
Ansicht
Themen-Optionen

Programm hängt sich wegen SLEEP auf *HILFE*

Ein Thema von Günni · begonnen am 17. Apr 2005 · letzter Beitrag vom 17. Apr 2005
Antwort Antwort
Günni

Registriert seit: 7. Dez 2004
9 Beiträge
 
#1

Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 13:11
Folgender Sachverhalt:


Ich habe eine Gifanimation die ich mittels mausklick gerne bewegen will. Da hab ich als erstes das hier gemacht:
Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
xm := X;
ym := Y;
end;

procedure TForm1.FormClick(Sender: TObject);
begin

if ym > JvGifAnimator1.Top then
begin
while ym > JvGifAnimator1.Top do
begin
JvGifAnimator1.Top :=JvGifAnimator1.Top +1;
end
end
else
begin
while ym < JvGifAnimator1.Top do
JvGifAnimator1.Top :=JvGifAnimator1.Top -1;
end;
if xm > JvGifAnimator1.Left then
begin
while xm > JvGifAnimator1.Left do
JvGifAnimator1.Left :=JvGifAnimator1.Left +1
end
else
begin
while xm < JvGifAnimator1.Left do
JvGifAnimator1.Left :=JvGifAnimator1.Lft -1;
end
  end;



n bisschen viele begins und ends ich weiss ja aber es funktioniert.Nur leider etwas zu schnell so dass gar keine Bewegung zu stande kommt, sondern die Animation sofort beim Mauszeiger landet dann hab ich einfach for jedes JvGifAnimator1.Left :=JvGifAnimator1.Left +1 und so weiter ein SLEEP(1) gesetzt und nun hängt es sich komplett auf und nichts geht mehr. Warum??? kennt jemand vielleicht eine Lösung oder weiss zumindest warum das dann hängt...ic hversteh es nicht.

Danke schonmal im Vorrausich bin mir sicher jemand kann mir helfen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 13:14
Sleep legt den ganzen Thread lahm, da es die verbleibende Rechnzeit an andere Prozesse abgibt. Probier mal Hier im Forum suchenDelay.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Uncle Cracker
Uncle Cracker

Registriert seit: 30. Mär 2003
Ort: Freital
694 Beiträge
 
#3

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 13:19
Mit der Funktion Sleep wird die Ausführung des aktuellen Threades unterbrochen. Wird Sleep im Hauptthread der Anwendung aufgerufen, so befindet sich die gesamte Anwendung anschließend im Ruhezustand und es werden in diesem Zeitraum weder Nachrichten noch Befehle abgearbeitet.
Das bedeutet, dass die gesamte Anwendung still steht und nicht mehr reagiert.

Um jetzt nicht das gesamte Programm zum stillstand zu bringen, sondern das Programm wie in einer Schleife laufen zulassen, nimmt man ProcessMessage. In Pascal gab es die Funktion Delay...

Delphi-Quellcode:
procedure Delay(const Milliseconds: DWord);
var Start: Integer;
begin
  Start:=GetTickCount;
  while GetTickCount-Start <= Milliseconds do
    application.ProcessMessages;
end;

[Edit]Hätte mir doch ni soviel Zeit lassen sollen, dann wäre ich erster... [/Edit]
I wish it was legal to marry software because I'm madly in love with Delphi...
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 13:37
Wie wärs mit Code einrücken und ordenlich Formatieren....
Guckst du hier!
Felix K.
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 15:15
Delay würde ich persönlich in diesem Fall nicht empfehlen, da dann deine Prozessorauslastung extrem stark ansteigt...

Statdessen rufe Application.ProcessMessages direkt nach deinem Sleep auf. Alternativ könntest du natürlich einen Extra-Thread erstellen, aber ob sich das lohnt (Frage Aufwand <-> Nutzen)?
Felix Alter
Japanurlaub 2015
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#6

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 15:26
Zitat von FAlter:
Delay würde ich persönlich in diesem Fall nicht empfehlen, da dann deine Prozessorauslastung extrem stark ansteigt...

Statdessen rufe Application.ProcessMessages direkt nach deinem Sleep auf. Alternativ könntest du natürlich einen Extra-Thread erstellen, aber ob sich das lohnt (Frage Aufwand <-> Nutzen)?
ProcessMessage nach Sleep aufrufen?? Sry aber ich dachte das Programm "schläft", d.h. es wird auch nix weitergemacht!
Felix K.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 15:30
die reihenfolge sollte man vielleicht wirklich überdenken das wenigstens erst die änderungen optich dargestellt werden (wie repaints etc.) und danach erst das sleep.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von FAlter
FAlter

Registriert seit: 21. Jul 2004
Ort: Ostfildern
1.095 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#8

Re: Programm hängt sich wegen SLEEP auf *HILFE*

  Alt 17. Apr 2005, 15:36
Zitat:
ProcessMessage nach Sleep aufrufen?? Sry aber ich dachte das Programm "schläft", d.h. es wird auch nix weitergemacht!
Nun ja, die Messages stehen somit immer noch in der "Warteschleife" (nicht wörtlich nehmen!), da eben NICHTS getan wurde.

Der Benutzer merkt keinen Unterschied, ob das Sleep vor oder nach dem Abarbeiten der Messages passiert, wenn die Sleep-Zeiten kurz genug sind.

Bei längeren Zeiten oder beim Supermenschen wäre es aber tatsächlich besser, erst ein Application.ProcessMessages und dann sleep aufzurufen, wie der Sir vorschlägt.
Felix Alter
Japanurlaub 2015
  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 23:01 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