PBOSL_AllocateMemoryGlobal()

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

PBOSL_AllocateMemoryGlobal()

Beitrag von 7x7 »

Ich habe ein Programm "A" und ein Programm "B". Beide Programme sollen über einen gemeinsamen Speicher
Daten austauschen. Als gemeinsamer Speicher kommt aus Geschwindigkeits- und Verfügbarkeitsgründen nur
RAM in Frage.

In PBOSL gibt es die Lib "PBOSL_AllocateMemoryGlobal()". Leider wird - wie bei Amateuren so üblich- an
Anwendungsinformationen oder Examples mächtig gespart. Irgendwie muss der Lib-Programmierer davon
ausgegangen sein, dass seine Gedanken jeder lesen kann.

Wie muss ich die Funktion anwenden? Hat das schonmal jemand benutzt?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: PBOSL_AllocateMemoryGlobal()

Beitrag von RSBasic »

http://www.purebasic.fr/german/viewtopi ... 16#p139216
http://www.purebasic.fr/german/viewtopi ... 135#p44135

Ich weiß aber nicht, ob du diese zwei Beispielcodes bereits kennst. Für mich wären die zwei Beispiele bereits ausreichend.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: PBOSL_AllocateMemoryGlobal()

Beitrag von ts-soft »

Es sind doch 2 Beispiele im examples Ordner enthalten, IMHO mehr als genug um diese einfach Lib zu verstehen.
Hier mal meine Umsetzung (ohne UserLib):

Code: Alles auswählen

Define HandleMap

Procedure CreateSharedMemory(Name.s, Size)
  Shared HandleMap
  HandleMap = CreateFileMapping_(#INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE|#SEC_COMMIT|#SEC_NOCACHE, 0, Size, @Name)
  If HandleMap
    ProcedureReturn MapViewOfFile_(HandleMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
  EndIf
EndProcedure

Procedure OpenSharedMemory(Name.s)
  Shared HandleMap
  HandleMap = OpenFileMapping_(#FILE_MAP_ALL_ACCESS, 0, @Name)
  If HandleMap
    ProcedureReturn MapViewOfFile_(HandleMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
  EndIf
EndProcedure

Procedure CloseSharedMemory(MemoryAddress)
  Shared HandleMap
  UnmapViewOfFile_(MemoryAddress)
  CloseHandle_(HandleMap)
EndProcedure
CreateSharedMemory(Name.s, Size):
Name: ein beliebieger String
Size: Grösse des Speichers

Andere Programme benötigen den Namen um den Speicher zu öffnen:
OpenSharedMemory(Name.s)

Mit CloseSharedMemory(MemoryAddress) wird das ganze geschlossen (erst nachdem die letzte Instance
es geschlossen hat, also nach einem Create und 3 Open, erst wenn diese alle geschlossen wurden.

Das Ergebnis der ersten beiden Funktionen ist die Speicheradresse, in die geschreiben werden kann.

Es empfiehlt sich, den Speicher zu strukturieren, wobei zu beachten ist, das dynamische Elemente nicht
genutzt werden können, also keine Strings, nur FixStrings, keine Arrays, List oder Maps.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Re: PBOSL_AllocateMemoryGlobal()

Beitrag von 7x7 »

ts-soft hat geschrieben:Es sind doch 2 Beispiele im examples Ordner enthalten...
Examples? Wo? In der "pbosl_win.zip" garantiert nicht.
Und ausserdem: Wäre es nicht logischer (nomen est omen) Hilfe in der "Hilfe" anzubieten?

Danke RSBasic für die Links. Hat sich aber mit ts-softs Code erledigt.

Danke ts-soft für dein Code ohne User-Lib. Diese offene, einsehbare und jederzeit anpassbare Form ist mir
wesentlich lieber, als eine unwartbare, geschlossene Lib von irgendwo.

Edit by NicTheQuick:
Reaktionen auf diesen Beitrag befinden sich hier.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: PBOSL_AllocateMemoryGlobal()

Beitrag von Bisonte »

hmmmm auf der offiziellen PBOSL Seite http://www.purearea.net/pb/german/index.htm sind doch Examples....
Ganz rechts oben... in der gleichen Reihe wie die Libs selbst....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten