Aktuelle Zeit: 06.04.2020 08:27

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: SharedMemory
BeitragVerfasst: 21.05.2008 05:15 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Nachdem ich den Code hier nicht finden konnte, hab ich in nochmal
aufbereitet, da ich denke, der eine oder andere kann das gebrauchen.
Die Include: ("shared_memory.pbi")
Code:
; PB 3.xx (mit kl. Anpassungen), PB 4.xx (evtl. sind nicht alle konstanten in allen Versionen deklariert)
; Windows only

Define HandleMap.l

; erstellt oder öffnet einen gemeinsamen benannten Speicher
; sollte der Speicher unter dem Namen bereits erstellt sein,
; so wird er geöffnet und Size wird ignoriert.
; dies entspricht dann OpenSharedMemory
Procedure AllocateSharedMemory(Name.s, Size.l)
  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

; öffnet einen bereits erstellten benannten Speicher
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

; gibt den Speicher für den aktuellen Process frei.
; erst wenn der letze Process den Speicher freigegeben
; hat, wird er endgültig freigegeben!
Procedure FreeSharedMemory(MemoryAddress.l)
  Shared HandleMap
  UnmapViewOfFile_(MemoryAddress)
  CloseHandle_(HandleMap)
EndProcedure


Beispiel Ersteller:
Code:
EnableExplicit

XIncludeFile "shared_memory.pbi"

Structure myMem
  text.s{23}
  quit.l
EndStructure

; test
Define *mem.myMem = AllocateSharedMemory("MyMemory", SizeOf(myMem))

If *mem
  *mem\text = "Feel the ..Pure.. Power"
 
  While *mem\quit = #False
    Delay(100)
  Wend
  FreeSharedMemory(*mem)
  MessageRequester("MyMemory", "Client hat quit gesetzt")
EndIf

Beispiel Client:
Code:
EnableExplicit

XIncludeFile "shared_memory.pbi"

Structure myMem
  text.s{23}
  quit.l
EndStructure

; test
Define *mem.myMem = OpenSharedMemory("MyMemory")

If *mem
  MessageRequester("MyMemory", *mem\text)
 
  *mem\quit = #True
  FreeSharedMemory(*mem)
EndIf

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: SharedMemory
BeitragVerfasst: 21.05.2008 08:45 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
@Thomas: Danke für den Code!

Ohne jetzt genau nachgesehen zu haben: Gibt es Vorteile, Nachteile,
Unterschiede zu GlobalSharedMemory in den PBOSL?

Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.05.2008 09:02 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
Vorteil:
-besser für Threadsicher/Unicode zu kompilieren
weil Includefile
-Einfacher umzustellen für die zukunft.

Nachteil:
mehr Code(wenn das überhaupt ein Nachteil iss)

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.05.2008 10:18 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9
Rings hat geschrieben:
Vorteil:
-besser für Threadsicher/Unicode zu kompilieren
weil Includefile

nur, wenn man die GlobalSharedMemory-LIB verwendet.
Nicht, wenn man den GlobalSharedMemory-Source einbindet ;-)

Grüße ... Kiffi

_________________
Schrödingers Smiley :):


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 21.05.2008 16:57 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Funktionell sind die Sourcen gleich. Ich denke meiner ist kürzer und ver-
ständlicher, aber das denke ich immer :mrgreen:

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 22.05.2008 08:21 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:48
ts-soft hat geschrieben:
Ich denke meiner ist kürzer und ver-
ständlicher, aber das denke ich immer :mrgreen:

Meine bessere Hälfte denkt genau anders herum

_________________
Rings hat geschrieben:
ziert sich nich beim zitieren


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 22.05.2008 11:10 
Offline
Benutzeravatar

Registriert: 14.08.2007 15:41
Wohnort: Lelbach
:mrgreen:

_________________
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2009 03:01 
Offline
Kommando SG1
Benutzeravatar

Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Tachchen habe mal n Frage dazu:

Wie sicher ist das lesen und schreiben in diesem SharedMemory?

Damit meine ich, ob es ohne weitere Sicherheitsmaßnahmen möglich ist das ein Programm "wann es will" rein schreibt und das andere "wann es will" rausließt.

Würde das zu einem Absturz führen ? (IMA)

Oder liefert das lesen einfach nur "unerwünschte" (also nicht ganz vollständige) Daten?

_________________
Bild
 
BildBildBild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2009 09:04 
Offline
Benutzeravatar

Registriert: 08.09.2004 08:53
mmmh, wenn ich das richtig verstehe, wird hier einfach von 2 oder mehreren Programmen eine Datei geöffnet und über die Windows API in den Speicher gemappt...genial!

_________________
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 23.02.2009 09:16 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Wenn ich es richtig verstanden habe, ist es so, das wenn tatsächlich 2 oder
mehr gleichzeitig etwas ändern, sehen auch nur diese die Änderung.
Gibt also keine IMA aber falsche Ergebnisse.

Durch das ändern der Procedure könnte man auch die Rechte einschränken,
hab ich aber nicht berücksichtig, könnte es aber noch einbauen, falls
gewünscht.

gruß
Thomas

_________________
PureBasic 5.71 | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 19.3 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye