Autor Beitrag
>M@steR<
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: So 07.10.12 16:51 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.10.12 17:26 
Es gibt nur zwei Möglichkeiten:
Entweder FreeOnTerminate oder eine externe Variable, die noch auf das Threadobjekt zugreift. Beides geht nicht, da du nie weißt wann der Pointer durch die Freigabe schon ungültig ist.

Was stattdessen sinnvoll ist, lässt sich so nicht sagen, dafür müsstest du genauer erklären was du damit bezweckst. Eine Möglichkeit wäre das Event OnTerminate des Threads zu benutzen.

Für diesen Beitrag haben gedankt: >M@steR<
>M@steR< Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: So 07.10.12 17:52 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: So 07.10.12 18:05 
Moin!

Wie user profile iconjaenicke schon vorgeschlagen hat, dürfte die einfachste Version sein:
  • Thread beim Erzeugen in eine Liste stellen
  • Beim OnTerminate des Threads diesen wieder aus der Liste entfernen
Damit sind nur Threads in der Liste, die noch "leben". :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: >M@steR<
haentschman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 285
Erhaltene Danke: 33


DX10 Berlin Professional
BeitragVerfasst: So 07.10.12 18:28 
Zitat:
Was ich erreichen möchte ist, dass ich den Thread durch klicken auf einen Button Pausieren / Resumen kann.

... aber nicht mit Suspend und Resume sondern über eine Flagvariable des Threads die von außen gesetzt wird und damit der abzuarbeitende Code übersprungen wird. Der Thread läuft zwar aber tut nix. Suspend und Resume kann manchmal komische Effekte hervorrufen weil man den Thread nicht zu einem definierten Zustand anhällt. Siehe hier: www.delphipraxis.net...sume-deprecated.html

Für diesen Beitrag haben gedankt: >M@steR<
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.10.12 20:35 
Ich werfe mal noch die Stichwörter Threadpool und Workerthread in den Raum. ;-)

Da gibt es drüben in der Delphipraxis auch umfangreiche Implementierungen, die du einfach benutzen kannst, z.B. diese:
www.delphipraxis.net...-delphi-2010-xe.html
(auf Anhieb die gefunden, da gab es aber auch andere...)
>M@steR< Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 288
Erhaltene Danke: 3



BeitragVerfasst: So 07.10.12 20:47 
Gelöscht


Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 08.10.12 05:35 
Statt einer reinen Flagvariablen kann man auch mit Events arbeiten. Das lässt sich prinzipiell genauso verwenden, aber ist threadsicher und man kann gezielt darauf warten, der Thread muss also nicht pollen. Zudem kann man allen Threads noch ein weiteres Event verpassen, mit dem alle abgebrochen werden (z.B. Programmende).
Stichworte: CreateEvent, SetEvent, WaitForSingleObject, WaitForMultipleObjects