Autor Beitrag
ralfi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 153



BeitragVerfasst: Mo 03.11.03 14:05 
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!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 153



BeitragVerfasst: 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!
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



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

ausblenden volle Höhe 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

{ TTestThread }

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:

ausblenden Delphi-Quelltext
1:
2:
var
  FTestThread: TTestThread;


wenn ich das programm schließen will, dann mach ich einfach folgendes:

ausblenden Delphi-Quelltext
1:
2:
FTestThread.Quit;
FTestThread.WaitFor;


hatte noch keine ernsten probleme damit.
shadow.

_________________
"soylent grün ist menschenfleisch!"
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mo 03.11.03 17:41 
und was soll ich dann in Execute machen?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TTestThread.Execute; 
begin 

  repeat 

    DoSomething; 

  until False; 

end;


?

shadow.

_________________
"soylent grün ist menschenfleisch!"
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mo 03.11.03 17:42 
ach jetzt hab ichs :oops:
wahrcheinlich

ausblenden Delphi-Quelltext
1:
2:
3:
repeat
  DoSometing;
until Terminated;


oder?

(wär gar nicht so dumm)

shadow.

_________________
"soylent grün ist menschenfleisch!"
barfuesser
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 324



BeitragVerfasst: Mo 03.11.03 17:43 
Wenn Du das False durch Terminated ersetzt, sollte es auch gehen.

barfuesser