Ich möchte Array-Daten zwischen zwei Anwendungen teilen. Meiner Meinung nach erstellt das erste Programm das Array und das zweite Programm kann das Array aus dem bereits zugewiesenen Speicherbereich lesen. Das Array ist kein dynamisches Array.
Ich habe einen Weg gefunden, den Zeiger mit OpenFileMapping
und MapViewOfFile
zu teilen. Ich habe kein Glück Array-Sharing zu implementieren und ich denke, ich möchte IPC-Methode noch nicht verwenden.
Ist es möglich, ein solches Schema zu planen (Sharing Array)? Mein Zweck ist es, Speicherverbrauch zu minimieren und Daten schnell zu lesen.
Ich habe meinen Kopf zerkratzt und darüber nachgedacht, was ein kurzes, aber vollständiges Beispiel für die gemeinsame Nutzung von Speicher zwischen zwei Anwendungen sein könnte. Die einzige Option ist eine Konsolenanwendung, GUI-Anwendungen benötigen mindestens 3 Dateien (DPR + PAS + DFM). Also habe ich mir ein kleines Beispiel ausgedacht, in dem ein Integer-Array unter Verwendung einer Memory-Mapped-Datei geteilt wird (unterstützt durch die Page-Datei, so dass ich keine physikalische Datei auf der Festplatte haben muss, damit dies funktioniert). Die Konsolenanwendung reagiert auf 3 Befehle:
Natürlich nimmt der Befehlsverarbeitungscode ungefähr 80% der gesamten Anwendung ein. Um dies zu testen, kompiliere die folgende Konsolenanwendung, finde die ausführbare Datei und starte sie zweimal . Gehe zum ersten Fenster und gib Folgendes ein:
%Vor%Gehe zur zweiten Konsole und gib folgendes ein:
%Vor%Gehe zur ersten Konsole und gib folgendes ein:
%Vor%Da haben Sie es, Sie haben gerade gesehen, wie Sie Speicher zwischen zwei Anwendungen teilen.
%Vor%Eine Benannte Dateizuordnung wäre die einfachste Lösung , hier ist ein kurzer Beispielcode. In diesem Beispiel gibt es ein Hauptprogramm, das einige Daten und Leser schreibt, die nur davon lesen.
Haupt:
%Vor%Leser:
%Vor%Tags und Links arrays delphi shared-memory