Autor Beitrag
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 14.02.05 19:28 
In diesem, nun leider geschlossenen Thread, kam die Frage auf, warum man denn BeginThread anstelle von CreateThread nehmen sollte. Nun die Antwort ist recht einfach. BeginThread ist zwar nur ein Wrapper für CreateThread, setzt aber zusätzlcih die globale Variable IsMultiThreaded auf True und macht so den Heap threadsafe.

Und um die Frage von uall@ogc zu beantworten: Dies gilt auch für C/C++. Auch dort sollte man CreateThread nie direkt aufrufen, sondern jewals den Wrapper der zum Compiler gehörigen Bibliothek:
PSDK hat folgendes geschrieben:

A thread that uses functions from the static C run-time libraries should use the beginthread and endthread C run-time functions for thread management rather than CreateThread and ExitThread. Failure to do so results in small memory leaks when ExitThread is called. Note that this is not a problem with the C run-time in a DLL.


Und kalr fuinktioniert das mit deiner Prozedur auch, ich bin nur der Meinung, wenn Delphi einen Typ fest vorgibt in der Hilfe:
ausblenden Delphi-Quelltext
1:
type TThreadFunc = function(Parameter: Pointer): Integer;					

Dann sollte man den auch benutzen, die werden sich schon was dabei gedacht haben.
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Mo 14.02.05 19:32 
Das trifft aber nur solange zu, wie man den Speichermanager der verwendeten RTL benutzt, oder man im Fall von Delphi IsMultiThreaded nicht selbst auf True setzt.

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert