Autor Beitrag
n0thin
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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



BeitragVerfasst: Mo 25.01.10 01:07 
Und es gibt noch Threads. Also was nutzt du jetzt?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19326
Erhaltene Danke: 1749

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mo 25.01.10 17:26 
ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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.