Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi eine eigene Thread-Klasse 2x starten (https://www.delphipraxis.net/82282-eine-eigene-thread-klasse-2x-starten.html)

Nogge 10. Dez 2006 11:03


eine eigene Thread-Klasse 2x starten
 
Hallo Community,
Ich habe mir eine Klasse erstellt, die die recv-Funktion von WinSock enthält. Die Klasse ist mit CriticalObjects synchroniert, wofür ich eine globale nicht-Klassen-Variable des Typs RTL_CRITICAL_SECTION benötige. Diese Klasse brauche ich allerdings 2x, d.h. ich brauche auch zwei globale Variablen des Typs RTL_CRITICAL_SECTION. Ich könnte jetzt zwei fast identische Units erstellen, die sich nur von der globalen Variable unterscheiden.
Diese Lösung ist jedoch sehr speicherlastig...Gibt es eine Möglichkeit oder einen besseren Vorschlag, für jede erstellte Klasse solch eine globale Variable zu erstellen?

mfg Nogge

ste_ett 10. Dez 2006 11:11

Re: eine eigene Thread-Klasse 2x starten
 
Eine Möglichkeit wäre, den Threads (z.B. im Konstruktor) eine Referenz auf das Objekt mit zu übergeben.
Die eigentlichen Objekte kannst du dann wo anders, evtl. lokal, erstellen. :)

Nogge 10. Dez 2006 12:02

Re: eine eigene Thread-Klasse 2x starten
 
Danke für den Tipp, ste_ett!
Ich habe einen Pointer auf den Typ deklariert und diesen als Parameter übergeben:
Delphi-Quellcode:
function TClient.RecvThread_Open(g_cs: PRTL_CRITICAL_SECTION): Boolean;
var
  ThreadID : Cardinal;
  Parameter : PParameter;
begin
  New(Parameter);
    Parameter^.Client := self;
    Parameter^.g_cs := g_cs;

  InitializeCriticalSection(g_cs^);

  FClientThread := BeginThread(nil, 0, @Client_RecvThread, Parameter, 0, ThreadID);
  FTerminated := (FClientThread = 0);
  Result := not FTerminated;
end;
Natürlich musste ich für meine RecvThread_Close()-func ebenfalls solch einen Parameter deklarieren, damit die CriticalSection mittels DeleteCriticalSection() freigegeben werden kann.

Nochmals Danke :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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