Seite 1 von 1

KillThread()

Verfasst: 21.10.2005 07:28
von nco2k
in der hilfe steht :
...Das Problem ist, dass der Thread umgehend entfernt wird und keine Chance hat, irgendwelchen "Aufräumcode" (z.B. Speicher freigeben, Einträge freigeben, De-Allokieren seines eigenen Stacks) auszuführen...
aber wenn das hauptprogramm dann irgendwann später endet, wird doch trotzdem wieder alles freigegeben inkl. den thread resten oder nicht??

c ya,
nco2k

Verfasst: 21.10.2005 11:55
von Laurin
Ja, soweit ich weiß, wird alles wieder auf Normal-Zustand zurückgesetzt, wenn das Programm beendet wird.

Im Zweifelsfall End benutzen ;)

Verfasst: 21.10.2005 12:03
von MVXA
Jap, die Ressourcen werden dann von den einzelnen PB Libs wieder frei
gegeben. Diese Tatsache hat mich mal lange bei der Programmierung
einer Userlib zappeln lassen :mrgreen:. Ich wollte beim Ende des Programms
eigenständig alle Speicherbereiche, die meine Userlib reserviert hat
wieder frei geben. Das führte aber immer wieder zu Speicherverletzungen.
Mir ist dann wieder eingefallen, dass PB selbst ja den Speicher wieder
frei gibt. Hab die FreeMemory() Befehle aus der Lib gelöscht und schon
funktionierte alles wie es sollte.

Allerdings würde ich an deiner Stelle alle reservierten Ressourcen in
einer Linked List speichern und wenn ein KillThread durchgeführt wird,
werden alle Elemente in der Liste durchgegangen, nach dem Typ ge-
schaut und dann den entsprechenden Free*() Befehl ausführen. Dann
verbraucht dein Programm nicht so viel Speicher

CreateThread()

Verfasst: 21.10.2005 12:20
von AND51
Da das Thema ja nun vollendet ist, kann ich doch sicherlich was fragen, um nicht einen neuen Thread zu eröffnen.

CreateThred()
Welche Möglichkeiten gibt es, Werte zu returnen, also zurückzugeben?
ProcedureReturn funktioniert ja nicht und wenn, würde es den Thread, bzw. die Prozedur beenden (steht in der Hilfe).
Kann ich Werte oder String mittels globaler Variablen zurückgeben? Das geht bei mir nciht so recht, oder (was ich nicht glube) ich mache etws falsch. Arrays sind immer global und so gebe ich zur Zeit immer Werte über ein Array zurück. Gibt es nicht eine elegantere Methode?
In meiner Not habe ich einmal den Inhalt der Zwischenablage in eine Variable gepackt, Werte aus einem Thread in die Zwischenablage gepackt, und nach dem auslesen der in der Zwischenablage zurückgegebenen Werte den ursprünglichen Inhalt der zwischenablage wiederhergestellt... :oops:
Und via InitNetwork() Daten ans eigene Programm zu schicken will ich auch nicht...