Einzelnen Beitrag anzeigen

hoda

Registriert seit: 26. Sep 2002
14 Beiträge
 
#1

Gezielt Informationen aus dem Speicher lesen.

  Alt 8. Dez 2010, 22:17
Hallo Delhi Gurus,
nach langer Zeit, wollte ich mich wieder an neue Herausforderungen in Delphi wagen. Nur wie es immer ist, bin ich an einem Punkt angekommen, wo ich nicht weiter weiß. Ich hoffe Ihr könnt mir, mit eurem Rat und guten Hinweisen, etwas unter die Arme greifen.

Die Herausforderung:
Ein Dienst soll zwei Threads beinhalten, indem die eine Thread Dateien aus einem XYZ Verzeichnis einliest und das gelesene im Hauptspeicher ablegt. Der zweite Thread soll von der abgelegten Stelle im Hauptspeicher die Daten lesen, manipulieren und extern wieder physikalisch abspeichern oder versenden.

Wieso mit zweit Threads?
Ich will, dass die beiden Verarbeitungen unabhängig voneinander ablaufen. Der A-Thread liest permanent die Dateien in den Hauptspeicher und gibt es dann frei zu Weiterverarbeitung. Der andere B-Thread liest dann die übergegebenen Informationen aus dem Hauptspeicher und modifiziert es entsprechend. Die Übergabe der Informationen soll anhand von Pointern erfolgen, die die Adresse des Hauptspeichers enthalten. Soweit die Theorie 
Den Dienst und die Threads kann ich erstellen. Dazu habe ich, aus dem Forum reichlich Dokus bzw. Informationen gelesen. Das Ablegen der Daten, habe ich über TMemoryStream gelöst. Ich bin mir nicht sicher, ob dass der richtige Weg ist!
Ich habe verzweifelt versucht, per Zeiger den Speicherbereich auszulesen. Nur leider funktioniert es nicht . Ich habe eine MemStream Objekt erstellt und lade mit LoadFromFile die Datei X hoch. Anschließend, ordne ich den Zeiger per myPointer := @MyMemStream zu. Wenn ich jetzt in zweiten Thread darauf zugreifen will bekomme ich Fehler.

Code:
A - Thread (myPointer : TPointer);

 MemStream : TMemoryStream;
Begin
   MemStream := TMemoryStream.create;
  myPointer := Nil;
   MemStream.LoadFromfile(MyFile)
   IF MemStream.Size > 0 then begin
      myPointer := @MemStream
   End;
   MemStream.Free;

B – Thread  (NewPointer:TPointer);

NewMemStream : TMemoryStream;
Begin
  NewMemStream := TMemoryStream.create;
  NewMemStream.readbuffer(TMemoryStream(NewPointer^), TMemoryStream(NewPointer^).Size);
  …
End;
Wie könnte man das Problem lösen oder was mache ich falsch?

Ich hoffe ich habe den richtigen Rubrik augewählt, wenn nicht Big Sorry!
  Mit Zitat antworten Zitat