AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array in Thread übergeben

Ein Thema von Osse · begonnen am 24. Mai 2005 · letzter Beitrag vom 8. Jun 2005
 
Osse

Registriert seit: 25. Mär 2005
Ort: Hamburg
74 Beiträge
 
Delphi 5 Enterprise
 
#1

Array in Thread übergeben

  Alt 24. Mai 2005, 23:33
HAllo,

zunächst ein kleiner Überblick, über mein Programm.

Ich habe drei Threads, die laufen.

Der erste guckt die ganze Zeit ob daten angekommen sind.
Der zweite kümmert sich um die Visualisierung.
Der dritte speichert die angekommenen Daten.

Die Daten in einem extra Thread zu speichern, ist sinnvoll da der Dateizugriff sehr lange Dauert (hab ich gelesen). Meine Anwendung muss allerdings sehr schnell sein, da ich jede ms ca. 150 Telegramme bekomme und diese auch dann speichern will in eine .csv Datei. Für diesen Zweck habe ich mir einen Ringspeicher angelegt in dem die Ankommenden Daten gespeichert werden.

Nun zu meinem Problem:

Da ich es nicht schaffe den array mit den Daten zwischen den zwei Threads zu synchronisieren, da ich zum einen einen statischen Array (Datenspeicher) angelegt habe (TRcvThread)und einen Zeiger übergebe.

Delphi-Quellcode:
 TRcvThread = class(TThread)
   private
      hClient: Byte;
      procedure DatenAusgeben;
      procedure Eingangsabgleich;
      procedure DatenSpeichern;
   protected
      procedure Execute; override;
   public
      Datenspeicher : array[0..Max_Anzahl_Datenspeicher] of TCANRcvMsg;
      Datenzaehler : Cardinal;
      procedure Set_hClient(_client : Byte);
      procedure GetDateiDaten(_Datenspeicher : array of TCANRcvMsg ; _Datenzaehler : cardinal);
   end;

 TDateiSchreiben = class(TThread)
   private
    Datei : TextFile;
    Datenzaehler : cardinal;
    Datenspeicher : array of TCANRcvMsg;
    procedure DatenFuerDateiHolen;
    procedure DatenSchreiben;
      { Private-Deklarationen }
   protected
      procedure Execute; override;

   public
      Dateiname : String;
   end;


procedure TRcvThread.GetDateiDaten(_Datenspeicher : array of TCANRcvMsg ; _Datenzaehler : cardinal);
begin
   _Datenzaehler := Datenzaehler;
   _Datenspeicher := Datenspeicher;
end;

procedure TDateiSchreiben.DatenFuerDateiHolen;
begin
  FRcvThread.GetDateiDaten(Datenspeicher , Datenzaehler);
end;
Darum hab ich ihn einfach global deklariert, so dass beide Threads drauf zugreifen können. Dies ist sehr unsauber, und am liebsten möchte ich den Datenarray synchronisieren. Da diese variante aber rel. lange dauert, bin ich auf die kritischen Abschnitte gestoßen. Leider werde ich aus dem cs Beispiel aus Luckies Toutorial nicht schlau, da die rede von einem "Zeiger auf eine RTL_CRITICAL_SECTION Struktur" ist. Ist das mein array?? wie muss ich den initalisieren??

Noch eine letzte Frage zu den Threads: Soll ich den Daten speichern Thread immer wieder beenden, wenn er fertig, oder erst am Programmende??
Das aufrufen benötigt doch auch zeit??

Vielen Dank und Gruß aus HH
  Mit Zitat antworten Zitat
 


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 +1. Es ist jetzt 12:48 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