Forum: Object-Pascal / Delphi-Language
by Rob09,
8. Okt 2011
:wall: Habe bei dem Code-Vorschlag, der den TThreadManager nutzt, übrigens auch nicht daran gedacht, dass der Thread ja auch regulär terminieren könnte, wobei dann auch FMyThread := nil gesetzt werden müsste. :coder2:
Forum: Object-Pascal / Delphi-Language
by Rob09,
8. Okt 2011
Okay, danke euch allen; glaube, ich bin jetzt ganz zufrieden :wink:
Zur Ergänzung ist mir noch aufgefallen, dass in den Code-Vorschlägen in meinem letzten Post noch Nachbesserungsbedarf besteht. Und zwar muss folgendes noch eingeschoben werden:
procedure TMyThread.Execute;
begin
...
CSAbbruch.Acquire;
// ANFANG EINSCHUB ...
Forum: Object-Pascal / Delphi-Language
by Rob09,
6. Okt 2011
Schonmal vielen Dank für die Beteiligung!
Zunächst mal zu Sir Rufos Vorschlag:
Gefällt mir eigentlich sehr gut, nur ist der Haken, dass ich auf keinen Fall dem Benutzer zumuten möchte, unnötig auf den Thread zu warten, da es keinen Schaden anrichtet, wenn er bei "unkritischen" Arbeiten unterbrochen wird. Es gibt allerdings auch "kritische" Arbeiten, die er in jedem Fall entweder ganz oder...
Forum: Object-Pascal / Delphi-Language
by Rob09,
5. Okt 2011
Okay, dabei dann doch noch eine Frage:
Wenn ich aus dem MainThread heraus das .Terminate des NebenThreads aufrufe, führt dann der MainThread den Code, der dabei in eventuellen OnMyTerminate-Events steht, aus (was ich meine ist, ob dieser Code dann zuerst ausgeführt wird und erst danach die Befehle, die im MainThread nach NebenThread.Terminate noch kommen)?
Forum: Object-Pascal / Delphi-Language
by Rob09,
5. Okt 2011
Ah, sehr gute Idee! :thumb:
Werde mich morgen (also heute wenns hell wird :wink:) mal ransetzen und dann Bericht erstatten.
Vielen Dank an alle bis hierher und gute Nacht! :hi:
Robert
Forum: Object-Pascal / Delphi-Language
by Rob09,
5. Okt 2011
@omata:
Du meinst also beim "regulären" Fertigwerden des Threads? Leider kann es auch sein, dass der Thread mit .Terminate abgebrochen wird, ohne dass das Programm geschlossen wird. In dem Fall müsste dann auch dafür gesorgt werden, dass die Referenz nil gesetzt wird. Wenn der .Terminate-Aufruf dann allerdings doch beim Schließen des Hauptfensters geschieht, stehe ich wieder vor dem oben...
Forum: Object-Pascal / Delphi-Language
by Rob09,
5. Okt 2011
Das tu ich deshalb, weil ich einen TThread benutze, der sich durch .FreeOnTerminate = True selbst zerstört, wenn er fertig ist (vgl. http://www.delphipraxis.net/163566-couninitialize-wirklich-noetig.html). Dabei wird die Referenz auf selbigen aber nicht nil gesetzt.
An Anderer Stelle möchte ich prüfen, ob der Thread noch läuft - dafür würde ich das oben nachgefragte dann brauchen.
Problem...
Forum: Object-Pascal / Delphi-Language
by Rob09,
5. Okt 2011
Hi!
Okay, folgendes:
Wenn ich prüfen möchte, ob ein Objekt existiert, dann kann ich ja einfach folgendes abfragen:
if Assigned(ReferenzAufObjekt) then ....
Das funktioniert aber nur dann, wenn ich beim zerstören des Objekts FreeAndNil(ReferenzAufObjektObjekt) verwende (oder halt ReferenzAufobjekt := nil).