![]() |
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 |
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. :) |
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:
Natürlich musste ich für meine RecvThread_Close()-func ebenfalls solch einen Parameter deklarieren, damit die CriticalSection mittels DeleteCriticalSection() freigegeben werden kann.
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; Nochmals Danke :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz