Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Das Programm und alle Threads sofort beenden?
ralfi - Mo 03.11.03 14:05
Titel: Das Programm und alle Threads sofort beenden?
Hallo!
Ich habe ständig 4 Threads in meinem Programm laufend. Immer wenn ich das Programm beenden möchte, erscheinen diverse Fehlermeldungen. Ich habe schon alles ausprobiert, was hier im Forum geschriben wurde, kein positives Ergebniss.
Kann ich irgendwie das Programm inkl alle Threads sofort beenden und alle mögliche Fehlermeldungen unterdrücken? Denn für mich ist nicht wichtig, was für ein Fehler da erscheint, mir ist wichtig, dass meine Anwendung wirklich beendet ist. Kennt jemand eine Methode?
Danke!
Delete - Mo 03.11.03 14:08
Kuck im OnClose welche Threads noch laufen, beende diese korrekt. Und wenn sie beendet sicht, läßt sich mittels WaitForMultipleObjects festellen, dann rufst du die Methode Close von TForm auf.
ralfi - Mo 03.11.03 15:20
@Luckie
Luckie, danke für deine Antwort, du hilfst mir ja immer, wenn es um Threads geht :-) Danke!
Könntest du mir ein bisschen genauer erklähren, was ich da machen soll, oder vielleicht eine Kode-Beispiel senden, weil ich ja noch praktish ein Anfänger bin... Wäre sehr dankbar!
Delete - Mo 03.11.03 15:33
Puh, Code Beispiel? Hm. Ich habe gerade die neue Version des Threading Tutorials veröffentlicht. da ist auch ein Demo für das VCL Thread-Objekt bei. (Allerdings habe ich da nicht so viel Aufwand getrieben und die noch laufenden Threads gnadenlos abgeschossen. :oops: )
ShadowThief - Mo 03.11.03 16:03
also ich seh das so:
"diverse fehlermeldungen" haben immer ursachen, d. h. diese zu unter-
drücken ist ein denkbar schlechter lösungsansatz.
ich habe in meinen threads eigentlich immer folgenden aufbau:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42:
| unit unit_TestThread;
interface
uses Classes;
type TTestThread = class(TThread) private FQuit: Boolean; protected procedure Execute; override; public procedure Quit; end;
implementation
procedure TTestThread.Execute; begin
FQuit := False;
repeat
DoSomething;
until FQuit;
end;
procedure TTestThread.Quit; begin
FQuit := True;
end;
end. |
in einer anderen unit hab ich ein objekt dieses threads:
Delphi-Quelltext
1: 2:
| var FTestThread: TTestThread; |
wenn ich das programm schließen will, dann mach ich einfach folgendes:
Delphi-Quelltext
1: 2:
| FTestThread.Quit; FTestThread.WaitFor; |
hatte noch keine ernsten probleme damit.
shadow.
Delete - Mo 03.11.03 16:22
Die private Variable FQuit und die Methode Quit kannst du dir sparen. Das Thread-Objekt hat die Eigenschaft Terminated und die Methode Terminate, welche die eigenschaft Treminated auf True setzt.
ShadowThief - Mo 03.11.03 17:41
und was soll ich dann in Execute machen?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TTestThread.Execute; begin
repeat
DoSomething;
until False;
end; |
?
shadow.
ShadowThief - Mo 03.11.03 17:42
ach jetzt hab ichs :oops:
wahrcheinlich
Delphi-Quelltext
1: 2: 3:
| repeat DoSometing; until Terminated; |
oder?
(wär gar nicht so dumm)
shadow.
barfuesser - Mo 03.11.03 17:43
Wenn Du das False durch Terminated ersetzt, sollte es auch gehen.
barfuesser
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!