Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi procedure von außerhalb abbrechen (https://www.delphipraxis.net/8445-procedure-von-ausserhalb-abbrechen.html)

nailor 4. Sep 2003 17:38


procedure von außerhalb abbrechen
 
Stellt euch mal vor, ich hätte ein Programm, das macht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i: byte;
begin
while true do
  begin
    inc(i);
    caption := inttostr(i);
  end;
end;
in echt macht es natürlich was Sinnvolleres, aber ich habe mir erlaubt, die Sache hierrauf zu vereinfachen...

Was ich jetzt will ist im Grunde ein Button,
- auf den ich klicken kann, während mein Programm zählt
- wäre notfalls möglich mit ProcessMessages, aber das scheint mir die Sache sehr langsam zu machen
- der dafür sorgt, dass das mein Programm aufhört zu zählen

damit wäre ich für den Anfang (hoch) zufrieden.

Michael

neolithos 4. Sep 2003 17:45

Re: procedure von außerhalb abbrechen
 
Schau unter Thread's
vielleicht ist das was

Billa 4. Sep 2003 18:26

Re: procedure von außerhalb abbrechen
 
Ich könnte mir auch sowas wie eine Callback-Funktion vorstellen....
Innerhalb Deiner Schleife wird eine (als Parameter übergebene) Funktion aufgerufen, die eine Abbruchbedingung setzt


procedure TuWas ( callbackfunc : function );
begin
while bedingung do
begin
...
...
bedingung := callbackfunc;
end;
end


Schau mal unter "Prozeduren und Funktionen als Parameter"

Ciao

nailor 4. Sep 2003 18:34

Re: procedure von außerhalb abbrechen
 
@neo: Ich hatte danach gesucht, aber 199 (oder so) Treffer motivieren nicht, weiter zu suchen

@billa: werde ich machen

JoelH 4. Sep 2003 18:36

Re: procedure von außerhalb abbrechen
 
http://www.delphipraxis.net/topic869...hlight=tthread

nailor 4. Sep 2003 18:47

Re: procedure von außerhalb abbrechen
 
Zitat:

Zitat von JoelH
http://www.delphipraxis.net/topic8693_threaddemo+mit+der+vcl+klasse+tthread+ve r%f6ffentlicht.html&highlight=tthread

Das hört sich doch sehr gut an. Sobald ich es durch habe, werde ich mich mal wieder melden... :wink:

ICh habe ja schon mal kurz reingeschaut, und grade was zu meckern:

Delphi-Quellcode:
procedure TForm1.UpdateLVCaption(Index, Count: Integer);
begin
  Listview1.Items[Index].SubItems[0] := 'Position: ' + IntToStr(Count);
  if Count >= 10000 then //<-- wenn da nur "=" steht, rennt mein schneller Rechner drüber weg, ohne was zu machen
    Listview1.Items[Index].SubItems[0] := 'fertig';
end;

JoelH 4. Sep 2003 19:00

Re: procedure von außerhalb abbrechen
 
das musst du Luckie sagen ;) Aber selbst wenn es so ist, dann ist dies nicht wirklich gut.

Was ist das für eine Kiste ? Mein Arbeitsrechner 2,4 (glaub ich) GHz PIV schuckt den Kram.

nailor 4. Sep 2003 19:35

Re: procedure von außerhalb abbrechen
 
Der Luckie wird das auch hier lesen ;)

Das gleiche Thema hatten wir schonmal, da ginge es um eine Uhrzeit zu der was gestoppt werden sollte. >= ist auf jeden Fall besser.

PS: Der Rechner ist nicht wirklich schnell, war eher ironisch, als ich meinte, dass er sogar so schnell ist, dass er das mit dem =10000 garnicht mitbekommt. (XP2000+)

JoelH 4. Sep 2003 20:09

hmm,
 
meiner nimmt es, iss auch XP2000+ zuhause.

nailor 4. Sep 2003 20:16

Re: procedure von außerhalb abbrechen
 
was verstehst du unter "nimmt es"? Es läuft bei mir auch, nur kommt nie Stopp, weil die wahrscheinlichkeit, dass die abfrage kommt, wenn es 10000 - und zwar genau 10000 - ist ist so klein, dass es bei mir noch nie der fall war, sondern der counter einfach immer weiter ging...

JoelH 4. Sep 2003 20:21

Re: procedure von außerhalb abbrechen
 
so wie ich das aber verstehe ist das der Sinn von syncronice , oder?
Dann funzt der doch nicht !?
Auch neu bei Threads bin, siehe =>
http://www.delphipraxis.net/topic936...tml&highlight=

Luckie 4. Sep 2003 21:54

Re: procedure von außerhalb abbrechen
 
Nix Threads.
Delphi-Quellcode:
var
  Canceled: Boolean = FALSE;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Canceled := TRUE;
end;


procedure TForm1.Button1Click(Sender: TObject);
var i: byte;
begin
  while not Canceled do
    begin
      inc(i);
      caption := inttostr(i);
      Application.ProcessMessages;
    end;
end;

nailor 4. Sep 2003 22:32

Re: procedure von außerhalb abbrechen
 
Hi Luckie, so hab ich es auch gedacht.

Geht das bei ner Sache, die ca. 10 min meinen Rechner auslastet nicht derb auf die Performance, mit dem Processmessages?

Und vor allem, auch wenn es nicht auf die Leistung geht, wenn die einzelnen Schleifendurchgänge aber länger sind als "inc(i)", dann ist die Abfrage nicht oft genug. Die Thread kann man, so hab ich es verstanden (aber noch nicht getestet) ja immer mal kurz anhalten.

Luckie 4. Sep 2003 22:35

Re: procedure von außerhalb abbrechen
 
Dann wäre in der tat zu überlgen, ob man nicht einen Thread nutzt.

nailor 4. Sep 2003 22:38

Re: procedure von außerhalb abbrechen
 
durchaus.

...bei neuen Problemen, die dabei auftreten, melde ich mich dann wieder :mrgreen:


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