Autor |
Beitrag |
n0thin
Hält's aus hier
Beiträge: 13
|
Verfasst: So 24.01.10 21:53
Hi,
ich programmier' gerade ein Programm zu Sortieralgorithmen. Mit grafischer Ausgabe im Säulendiagramm, wobei auch die Zwischenschritte ausgegeben werden(per Delay), soll heißen, man sieht die Säulen wandern.
Nun, das Programm funktioniert wunderbar, nur eine Kleinigkeit stört mich: Wenn man während des Rechnenprozesses den Reset-Button klickt, werden zwar alle momentan vorhandenen Ausgaben gelöscht, dadurch, dass der Prozess aber noch weiter läuft, spuckt er ständig neues Zeug aus. Das will ich natürlich nicht. Ich suche also einen Befehl, mit dem man laufende Prozesse innerhalb des Programms abschießen kann. So etwas gibt es bestimmt, ich bin nur noch nicht so erfahren im Programmieren.
Danke im Vorraus,
MfG
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 24.01.10 21:55
Es gibt keine Prozesses inner halb eines Prozesses. Der Prozess ist der Container. Innerhalb eines Prozesses gibt es nur Threads. Und wenn du uns nicht sagst, wie dein Programm arbeitet, wird man dir kaum helfen können.
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 25.01.10 00:27
Nun, mein Programm vergleicht, weist zu und gibt aus. Ich kann hier kaum den ganzen Quellcode posten, er ist auch nicht wirklich wichtig. Ich will nur, dass das Programm, sobald ich auf den Reset-Button drücke, aufhört zu sortieren und vor allem auszugeben. Der Prozess (oder wie auch immer) des Sortierens und Ausgebens soll also durch einen mir unbekannten Befehl aufgehalten werden und genau diesen Befehl suche ich hier. Ich bin mir recht sicher, dass es einen geben müsste, weil er ja nicht allzu selten benutzt werden würde.
MfG
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 25.01.10 00:38
Ich nehme an, du willst einen Thread terminieren.
Das ist von aussen heraus schwer, da gibt es keinen allgemeinen Befehl.
Ohne den Quellcode oder zumindest ein paar Informationen kann ich dir auch nicht weiterhelfen.
mfg Boldar
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 25.01.10 00:41
Hey,
wie Luckie schon gesagt hat geht das Ohne den Quelltext schwer, weil wir ja nicht wissen wie genau du das machst. Wenn du nen Timer benutz, da musst du einfach nur den Timer anhalten, wenn du ne endlosschleife hast, dann kannst du die über break; vrelassen. Wenn du es über OnIdle machst, müstest du ne Boolean-Variable machen un nur in die eigentlichen SortierTeil reinspringen, wenn der Boolean True is...
Es gibt n haufen Mehtoden das zu machen, aber die besste können wir dir nur sagen wenn du uns den Quelltext zeigst, oder ausführlich beschreibst, wie das Programm arbeitet...
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 25.01.10 01:07
Und es gibt noch Threads. Also was nutzt du jetzt?
|
|
jaenicke
      
Beiträge: 19326
Erhaltene Danke: 1749
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 25.01.10 03:24
Sollte es sich um einen Thread handeln, dann kannst du beim Thread Terminate aufrufen. Dadurch wird Terminated auf True gesetzt, so dass du innerhalb des Threads weißt, dass du abbrechen musst.
Zum Rest wurde ja schon etwas gesagt. Und allgemein gibt es eben nix. Da musst du schon schreiben was du machst.
|
|
jfheins
      
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mo 25.01.10 10:25
Wahrscheinlich verwendet er Application.ProcessMessages ...
In diesem Fall musst du eine art abbruch-variable setzen, die du dann nach dem Aufruf auswerten kannst und ggf. abbrechen.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 25.01.10 12:51
Ich glaube, es wäre sinnvoll, wenn sich der Threadstarter erstmal dazu äußern würde, wie er es macht bevor wir hier weiter sinnlos rumraten.
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 25.01.10 17:26
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure MinSort; ... ... for i := 0 to High(Feld) - 1 do begin Inc(Zuweisungen); Min := i; Inc(Zuweisungen); for j := i + 1 to High(Feld) do begin Inc(Zuweisungen); if Feld[j] < Feld[Min] then begin Min := j; Inc(Zuweisungen); end; end; Temp := Feld[Min]; Feld[Min] := Feld[i]; Feld[i] := Temp; Inc(Zuweisungen,3); Inc(Vertauschungen); end; ... |
So, das ist einer meiner Algorithmen zum Sortieren.
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.BitBtnResetClick(Sender: TObject); begin Leeren; ImgGrafik.Picture:=(nil); Sperren; end; |
Und hier die OnClick-Prozedur. Wenn ich jetzt auf diesen Button klicke soll die obere Prozedur sofort beendet werden. Da es eben sofort und nicht erst später sein soll und die Ausgabe auch noch wo anders geregelt ist, kann ich keinen Exit-Befehl irgendwo in die Schleife reinpacken, wie mir heute jemand empfohlen hat.
Was genau das jetzt ist, davon hab ich nicht allzu viel Ahnung
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mo 25.01.10 17:47
Hey,
mit Exit kannst du aus der aktuellen Prozedur rausspringen, also sie beenden. Mach dir ne Booleanvariable, die du beim Buttonclick auf True setzt uns dann prüfst du in der Schleife des Sortieralgos ob die Variable True is, wenn ja dann exit;
Das is die einfache Lösung. Wenn ud's professioneller haben willst, solltest du auf Threads umsteigen...
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: Mo 25.01.10 17:57
Ja, genau das hatte ich schon getan, nur ich hatte nen gewaltigen Denkfehler drin^^
naja, danke an alle, die mir helfen wollten oder geholfen haben, es funktioniert jetzt...
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 25.01.10 18:04
Moin!
Markierst du den Thread noch entsprechend, wenn dein Problem gelöst ist? Danke.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|