Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Schleifenabbruch durch Esc Taste... (https://www.delphipraxis.net/182573-schleifenabbruch-durch-esc-taste.html)

BUG 7. Nov 2014 19:08

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von himitsu (Beitrag 1279109)
Und keiner gibt dem MainThread Zeit diese zu verarbeiten.

Sicher? Das doch macht Application.ProcessMessages.

Codix32 7. Nov 2014 20:32

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von BUG (Beitrag 1279108)
Zitat:

Zitat von Codix32 (Beitrag 1279104)
Vielleicht eine zweite Schleife rein? Mal sehen.

Entweder das, oder:
Zitat:

Zitat von Dalai (Beitrag 1278439)
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

Codix32 7. Nov 2014 20:45

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von Codix32 (Beitrag 1279117)
Zitat:

Zitat von BUG (Beitrag 1279108)
Zitat:

Zitat von Codix32 (Beitrag 1279104)
Vielleicht eine zweite Schleife rein? Mal sehen.

Entweder das, oder:
Zitat:

Zitat von Dalai (Beitrag 1278439)
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

Codix32 7. Nov 2014 20:52

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von himitsu (Beitrag 1279109)
Zitat:

Zitat von BUG (Beitrag 1279100)
Stimmt, vermutlich wird da jedes mal eine Nachricht gesendet :shock:
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.

hathor 7. Nov 2014 21:29

AW: Schleifenabbruch durch Esc Taste...
 
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...?

himitsu 7. Nov 2014 22:00

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von BUG (Beitrag 1279112)
Zitat:

Zitat von himitsu (Beitrag 1279109)
Und keiner gibt dem MainThread Zeit diese zu verarbeiten.

Sicher? Das doch macht Application.ProcessMessages.

Zitat:

Zitat von Codix32 (Beitrag 1278365)
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. :stupid:


Die Frage ist auch, ob man hier wirklich eine Lösung braucht, oder man man nicht besser einen "ordentlichen" und vorallem praxisnaheren Code verwendet.

BUG 8. Nov 2014 01:39

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von Codix32 (Beitrag 1279120)
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?

Luckie 8. Nov 2014 11:52

AW: Schleifenabbruch durch Esc Taste...
 
Zitat:

Zitat von Dejan Vu (Beitrag 1279042)
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.

hathor 9. Nov 2014 08:36

AW: Schleifenabbruch durch Esc Taste...
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

Codix32 9. Nov 2014 21:19

AW: Schleifenabbruch durch Esc Taste...
 
[QUOTE=BUG;1279134]
Zitat:

Zitat von Codix32 (Beitrag 1279120)
...
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 Uhr.
Seite 4 von 5   « Erste     234 5      

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