Autor |
Beitrag |
>M@steR<
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: So 07.10.12 16:51
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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< 
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: So 07.10.12 17:52
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
|
|
Narses
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: So 07.10.12 18:05
Moin!
Wie jaenicke 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".
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
      
Beiträge: 285
Erhaltene Danke: 33
DX10 Berlin Professional
|
Verfasst: 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
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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< 
      
Beiträge: 288
Erhaltene Danke: 3
|
Verfasst: So 07.10.12 20:47
Zuletzt bearbeitet von >M@steR< am Di 17.09.13 03:01, insgesamt 1-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
|
|