Announcement

Collapse
No announcement yet.

Problem: 2 Programme teilen sich einen Speicherbereich

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem: 2 Programme teilen sich einen Speicherbereich

    Hallo, <br>
    wir entwickeln mit Delphi 4.0 unter Windows NT 4.0. <br>
    Wie kann ich einen festen Speicherbereich festlegen, auf dem 2 Delphi-Programme oder sogar mehr daraufzugreifen können (lesend und schreibend).<br>
    Natürlich müßte man das gegenseitige Schreiben von Speicherwerten<br>
    verhindern (Semaphore ?, Mutexe ?)<br>
    Ich stelle mir das so vor, ein Programm alloziert Speicher und schreibt <br> die Startadresse, mit Gesamt-Speichergröße in eine Datei.
    Wird das 2. Programm gestartet, so liest es diese Parameter aus der Datei aus.<br>
    Wie könnte man dieses Problem lösen ? <br>
    Vielen Dank.<br>
    Gruß <br>

    Ralf Eberhard <br>

  • #2
    Hallo,<br>ich denke das Stichwort lautet <b>MemoryMappedFiles</b&gt

    Comment


    • #3
      Hallo, <br>
      nochmals vielen Dank für Ihre Antwort. <br>
      Kennen Sie irgendwelche web-Adressen, Beispiele, in denen man <br>
      sich über MemoryMappedFiles schlau machen kann. <br>
      Ich hoffe nur, das "File" bedeutet nicht, daß die Daten auch auf <br>
      Festplatte geschrieben werden. Ich brauche die Daten nur im RAM zu halten. <br>

      Danke. <br>

      Gruß <br>

      Ralf Eberhard <br&gt

      Comment


      • #4
        Hallo,

        in meinem Buch <i>Delphi Win32-Lösungen</i> kommen Memory Mapped Files auf den Seiten 210-214 (inkl. Beispiel) vor. Wenn der "nackte" Sourcecode ausreicht, liefert Borland gleich 2 Beispiele aus: <br>
        a) C:\Programme\Borland\Delphi5\Demos\Ipcdemos = <b>TSharedMem</b><br>
        b) C:\Programme\Borland\Delphi5\Demos\Resxplor<br>
        (diese Beispiel sind auch in Delphi 6 und Delphi 7 zu finden)

        <pre>
        ...
        { This class simplifies the process of creating a region of shared memory.
        In Win32, this is accomplished by using the CreateFileMapping and
        MapViewOfFile functions. }

        TSharedMem = class(THandledObject)
        private
        FName: string;
        FSize: Integer;
        FCreated: Boolean;
        FFileView: Pointer;
        public
        constructor Create(const Name: string; Size: Integer);
        destructor Destroy; override;
        property Name: string read FName;
        property Size: Integer read FSize;
        property Buffer: Pointer read FFileView;
        property Created: Boolean read FCreated;
        end;
        ...
        </pre>

        &gt;Ich hoffe nur, das "File" bedeutet nicht, daß die Daten auch auf
        Festplatte geschrieben werden

        Das hängt von der Größe der Daten ab - im Worst-Case-Fall landen diese in der Auslagerungsdatei von Windows, wenn der Arbeitsspeicher für "sinnvollere" Zwecke benötigt wird

        Comment

        Working...
        X