AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

eine eigene Thread-Klasse 2x starten

Ein Thema von Nogge · begonnen am 10. Dez 2006 · letzter Beitrag vom 10. Dez 2006
Antwort Antwort
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#1

eine eigene Thread-Klasse 2x starten

  Alt 10. Dez 2006, 11:03
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
  Mit Zitat antworten Zitat
Benutzerbild von ste_ett
ste_ett

Registriert seit: 10. Sep 2004
Ort: Dülmen
464 Beiträge
 
Delphi 7 Professional
 
#2

Re: eine eigene Thread-Klasse 2x starten

  Alt 10. Dez 2006, 11:11
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.
Stefan
"Geht nicht!" ist keine Fehlerbeschreibung und "Hab ich schon versucht!" keine Antwort!

Hey, it compiles! Ship it!
  Mit Zitat antworten Zitat
Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#3

Re: eine eigene Thread-Klasse 2x starten

  Alt 10. Dez 2006, 12:02
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf