AGB  ·  Datenschutz  ·  Impressum  







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

Schleifenabbruch durch Esc Taste...

Ein Thema von Codix32 · begonnen am 1. Nov 2014 · letzter Beitrag vom 9. Nov 2014
Antwort Antwort
Seite 4 von 5   « Erste     234 5      
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#31

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 19:08
Und keiner gibt dem MainThread Zeit diese zu verarbeiten.
Sicher? Das doch macht Application.ProcessMessages.
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#32

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 20:32
Vielleicht eine zweite Schleife rein? Mal sehen.
Entweder das, oder:
Warum überhaupt eine for-Schleife mit einem hohen Zahlenwert als Abbruchbedingung statt einer while- oder repeat-until-Schleife?
Du meinst eine Endlossschleife? Ja, das stimmt eigentlich. Ok
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#33

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 20:45
Vielleicht eine zweite Schleife rein? Mal sehen.
Entweder das, oder:
Warum überhaupt eine for-Schleife mit einem hohen Zahlenwert als Abbruchbedingung statt einer while- oder repeat-until-Schleife?
Du meinst eine Endlossschleife? Ja, das stimmt eigentlich. Ok
Dalai, danke,

Wenn ich das Caption rauslasse kann ich ESC drücken und das Form sofort schließen.

Delphi-Quellcode:
procedure TForm1.EndlossSchleife;
 var
 i:integer;
begin
 ResetEscPressed;
 while i <= 100000000 do
  begin
       Application.ProcessMessages;
       if EscPressed('Schleife abbrechen ?') then break;
  end;
      Label1.Caption:= 'stop';
end;
Wenn ich jetzt ein 'Caption:=inttostr(i);' einfüge, kann ich auch das Form sofort schliesen.
Erst wenn ich jetzt ein 'inc(i)' reintue, habe ich wieder das Problem

Geändert von Codix32 ( 7. Nov 2014 um 21:18 Uhr)
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#34

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 20:52
Stimmt, vermutlich wird da jedes mal eine Nachricht gesendet
Das könnte schon ein bisschen Ärger machen.
Und keiner gibt dem MainThread Zeit diese zu verarbeiten.

Das passiert alles erst nach dem Ende der Methode, bzw. beim Anzeigen des Abbruch-Dialogs.
@himitsu,

Das Caption ist aber schon zum Zähler geworden, nachdem ich den Button angeklickt habe und hat auch beim Drücken der ESC Taste sofort gestoppt.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#35

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 21:29
Das procedure TForm1.EndlossSchleife; scheint nicht das Einzige zu sein, was in Deinem Programm abläuft.
Wie wäre es mit dem vollständigen Code...?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#36

AW: Schleifenabbruch durch Esc Taste...

  Alt 7. Nov 2014, 22:00
Und keiner gibt dem MainThread Zeit diese zu verarbeiten.
Sicher? Das doch macht Application.ProcessMessages.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   i : Integer;
begin
   ResetEscPressed;
   for i := 0 to 10000000 do
   begin
     Caption := inttostr(i);
     if EscPressed('Schleife abbrechen ?') then Break;
   end;
end;
Wo?
Also zumindestens nicht im Original.


Die Frage ist auch, ob man hier wirklich eine Lösung braucht, oder man man nicht besser einen "ordentlichen" und vorallem praxisnaheren Code verwendet.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#37

AW: Schleifenabbruch durch Esc Taste...

  Alt 8. Nov 2014, 01:39
Wenn ich jetzt ein 'Caption:=inttostr(i);' einfüge, kann ich auch das Form sofort schliesen.
Erst wenn ich jetzt ein 'inc(i)' reintue, habe ich wieder das Problem
Ich vermute mal, das da auf Gleichheit geprüft wird, bevor irgendetwas bewegendes passiert. Müsste man wohl in die Sourcen gucken.

Allerdings hat Himitsu schon recht: richtig bringt es nichts, dem jetzt nachzuspüren ... hast du denn noch Problem mit dem Code in deiner Anwendung?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

AW: Schleifenabbruch durch Esc Taste...

  Alt 8. Nov 2014, 11:52
Soweit ich mich erinnere, muss der Thread schon selber Bescheid geben, wenn er unterbrochen werden könnte, meist durch API-Aufrufe.
Du erinnerst dich falsch. jeder laufende Thread bekommt eine Zeitscheibe. Höher priorisierte Threads kommen einfach öfters dran und nicht länger.

Zitat:
Soweit ich weiß, unterbricht Windows die Threads nicht selbst, sondern nur die Prozesse...
Auch das stimmt leider nicht. Ein Prozess ist nur ein "Container" für Windows zur Verwaltung. Code wird immer nur von Threads ausgeführt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hathor
(Gast)

n/a Beiträge
 
#39

AW: Schleifenabbruch durch Esc Taste...

  Alt 9. Nov 2014, 08:36
Seit WIN VISTA gibt es neue APIs, u.a. die wait chain traversal API.
http://msdn.microsoft.com/de-DE/libr...=vs.85%29.aspx
http://docwiki.embarcadero.com/RADSt.../de/Wait_Chain

Man kann im Task Manager mit Rechtsklick auf das verdächtige Programm sehen, ob Threads hängen - siehe Anhang.
Miniaturansicht angehängter Grafiken
warteschlange-1.jpg  

Geändert von hathor ( 9. Nov 2014 um 09:19 Uhr)
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#40

AW: Schleifenabbruch durch Esc Taste...

  Alt 9. Nov 2014, 21:19
[QUOTE=BUG;1279134]
...
Allerdings hat Himitsu schon recht: richtig bringt es nichts, dem jetzt nachzuspüren ... hast du denn noch Problem mit dem Code in deiner Anwendung?
Nö, BUG,

es ist wirklich so, dass ich in dieser Anwendung nur diese Schleife laufen ließ, um den Tatenabbruch zu testen, es ist da sonst nichts.

Ich wollte jetzt auch nicht unbedingt eine Lawine lostreten. Es genügt mir, dass ich mit 'Sleep' ein Aufhängen des Rechners verhindern kann.
Natürlich mache ich mir schon Gedanken, dass eine 'GetAsyncKeyState' einen solchen programmübergreifenden Hänger verursachen kann. Sehe gerade, dass die Funktion der WinApi angehört, also keine, nur Delphi interne Funktion ist.
Andererseits habe ich auch schon an Net Framework 1.1 gedacht, das installiert sein muss, um Delphi 2005 überhaupt installieren zu können.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 00:25 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