Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Threads - Speicherprobleme (https://www.delphipraxis.net/106407-threads-speicherprobleme.html)

Neutral General 10. Jan 2008 12:08


Threads - Speicherprobleme
 
Hi,

Mir ist leider kein bessere Titel eingefallen. Ich musste jetzt am eigenen Leibe erfahren das es so ein Problem ist in Threads dynamisch Speicher zu reservieren oder freizugeben (GetMem, New, SetLength, ...). Damit schießt man den Thread irgendwie ab. Ich hab das Gefühl der Thread selbst überschreibt sich -.-
Da gibt es doch bestimmt ne Lösung für oder?


Delphi-Quellcode:
FDataThread := CreateThread(nil, 0, TFNThreadStartRoutine(@CheckIncomingData),Self, 0, ID);

procedure CheckIncomingData(AClient: TClient); stdcall;
begin
  // SetLength, GetMem machen hier alles kaputt
end;
Gruß
Neutral General

Muetze1 10. Jan 2008 12:25

Re: Threads - Speicherprobleme
 
Ich kenne keine und hatte bisher nie Probleme mit SetLength(), GetMem(), New() oder auch .Create() (bei nicht visuellen Klassen) in einem Thread. Somit muss das Problem bei dir wahrscheinlich an einer anderen Stelle liegen.

Luckie 10. Jan 2008 12:27

Re: Threads - Speicherprobleme
 
Nutze statt MSDN-Library durchsuchenCreateThread besser Delphi-Referenz durchsuchenBeginThread, ansonsten wird die globale variable IsMultiThreaded nicht gesetzt und der Heap ist nicht threadsafe.

Neutral General 10. Jan 2008 12:32

Re: Threads - Speicherprobleme
 
Zitat:

Zitat von Luckie
Nutze statt MSDN-Library durchsuchenCreateThread besser Delphi-Referenz durchsuchenBeginThread, ansonsten wird die globale variable IsMultiThreaded nicht gesetzt und der Heap ist nicht threadsafe.

Danke Luckie!
Jetzt tritt das Problem nicht mehr auf :) :thumb:

Gruß
Neutral General

himitsu 10. Jan 2008 13:46

Re: Threads - Speicherprobleme
 
man kann aber auch selber den verschiedenen Delphi-Dingern (Speichermanager uvm.) mitteilen, daß man eine Threadanwendung hat.

einfach nur
Delphi-Quellcode:
IsMultiThreaded := True;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz