Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   C# Threads und Nachrichtenschleifen (https://www.delphipraxis.net/53167-threads-und-nachrichtenschleifen.html)

faux 11. Sep 2005 15:59


Threads und Nachrichtenschleifen
 
Hallo!

Ich habe eine for-Schleife, die ca 1e9 Durchläufe hat. Das ganze dauert also eine Weile. Jetzt will ich einen STOP-Button realisieren.
Luckie hat mir vorgeschlagen, dass ich die Schleife in einen Thread geben soll oder eine Nachrichtenschleife machen soll. Leider habe ich weder vom einen noch vom Anderen irgend eine Ahnung. Kennt da jemand ein Tutorial für .NET? Egal ob Delphi oder C#.
Oder kann mir jemand ein kurzes Beispiel geben. Also einfach eine lange Schleife die man abbrechen kann.

Danke für jede Hilfe.

Faux

Ultimator 11. Sep 2005 16:21

Re: Threads und Nachrichtenschleifen
 
Nur so als Tipp: Application.ProcessMessages ist in .NET gleichbedeutend mit Application.DoEvents ;)

faux 11. Sep 2005 16:26

Re: Threads und Nachrichtenschleifen
 
Häää???
SOrry, aber ich steh grad voll auf der Leitung... :oops:

DGL-luke 11. Sep 2005 16:35

Re: Threads und Nachrichtenschleifen
 
Delphi-Quellcode:
//Delphi-Code

//event des stop-buttons
begin
stop:=true;
end;

//in der schleife
for i:= 0 to high(something) do
 begin
  {...}
  if i mod 10000 = 0 then application.processmessages;
  if stop then exit; //oder break oder so ähnlich... mit den ganzen stopp-befehlen kenn ich mich nicht aus.
 end;

Ultimator 11. Sep 2005 16:39

Re: Threads und Nachrichtenschleifen
 
Naja, wenn du in Win32 bspw. ne Schleife hast, die lang dauert, aber die Programmoberfläche noch benutzbar sein soll, dann verwendest du ja auch Application.ProcessMessages.
Delphi-Quellcode:
procedure TWinForm.Button2_Click(sender: System.Object; e: System.EventArgs);
begin
  MessageBox.Show('Abänt!');
end;

procedure TWinForm.Button1_Click(sender: System.Object; e: System.EventArgs);
var i: integer;
begin
 for i := 0 to 1000000 do
  begin
   ListBox1.Items.Add(i.ToString);
   Application.DoEvents;
  end;
end;

Das is jetz Delphi.NET-Code.

Wenn du Button1 clickst, dann werden die Zahlen in die ListBox geschrieben.
Während das noch läuft, kannst du Button2 clicken, und die MessageBox kommt trotzdem ;)


@DGL-Luke: Naja, das is halt Win32-Code ;)
Aber einfach das Application.ProcessMessages durch .DoEvents ersetzen, und dann müssts laufen :)

faux 11. Sep 2005 20:03

Re: Threads und Nachrichtenschleifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Ultimator! Was bewirkt Application.DoEvents eigentlich genau?

Noch was anderes: Wenn man den Stop-BUtton betätigen will und auf ihn klickt, dann wird zuerst der Start-Button erneut gedrückt. Woran liegt das? (siehe Anhang)

malo 11. Sep 2005 20:29

Re: Threads und Nachrichtenschleifen
 
Zitat:

Zitat von faux
Danke Ultimator! Was bewirkt Application.DoEvents eigentlich genau?

Da werden, gerade bei Schleifen, immer alle anderen Events erst verarbeitet, bis die jeweilige Routine (Schleife) weitergeht. Kann zum Beispiel benutzt werden, wenn man mit einer Schleife etwas aufs Canvas zeichnen will o.Ä. Ohne Application.ProcessMessages / Application.DoEvents würde man davon gar nichts sehen können ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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