AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Gezielt Informationen aus dem Speicher lesen.
Thema durchsuchen
Ansicht
Themen-Optionen

Gezielt Informationen aus dem Speicher lesen.

Ein Thema von hoda · begonnen am 8. Dez 2010 · letzter Beitrag vom 9. Dez 2010
Antwort Antwort
hoda

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

Gezielt Informationen aus dem Speicher lesen.

  Alt 8. Dez 2010, 23: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
Benutzerbild von cookie22
cookie22

Registriert seit: 28. Jun 2006
Ort: Düsseldorf
936 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Gezielt Informationen aus dem Speicher lesen.

  Alt 9. Dez 2010, 03:55
wenn du in thread a den stream schon wieder freigibst, dann ist er unter umständen ja schon überschrieben wenn thread b drauf zugreift.
Gruß
Cookie
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Gezielt Informationen aus dem Speicher lesen.

  Alt 9. Dez 2010, 09:14
Du brauchst zunächst eine Klasse, die eine Datei (incl. Name) im Speicher halten kann:
Delphi-Quellcode:
TMemFile=class(TObject)
public
  filename:string;
  MemoryStream:TMemoryStream;
end;
Thread A erzeugt pro Datei ein Objekt dieser Klasse und lädt die Datei in den Memorystream.
Dann schiebt der Thread A das Objekt in die Queue Q.
Diese Queue muss threadsicher gemacht werden.
Thread B liest nun aus Q und manipuliert die Daten im Memorystream.
Anschliesend gibt er das übernommene TMemFile-Objekt frei.

Threads und Queues gehören einfach zusammen.
Somit gibt es keine Übergabe von Pointern über den Hauptspeicher.
  Mit Zitat antworten Zitat
hoda

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

AW: Gezielt Informationen aus dem Speicher lesen.

  Alt 9. Dez 2010, 09:46
Die Befürchtung habe ich auch. Gibt es Alternativen? Evtl. direkt den Speicher schreiben. Ich hoffe ich muss jetzt nicht Assemblieren
  Mit Zitat antworten Zitat
hoda

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

AW: Gezielt Informationen aus dem Speicher lesen.

  Alt 9. Dez 2010, 10:12
@SX2008
Vielen Dank, ich werde es ausprobieren.
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:11 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