Seite 2 von 2
Verfasst: 14.02.2007 20:45
von Brügge
hi danke für die ganzen posts...
@ ts-soft
so ganz verstehe ich das programm nicht...
@ all
mit RunProgram() geht das ja auch das die untereinander komunizieren. allerdings wird nicht beschrieben wofür die ganzen werte stehen...
kann mir wer sagen was die ganzen parameter machen?
vll geht es ja ganz einfach damit ^^
thx!
Verfasst: 14.02.2007 20:59
von ts-soft
Brügge hat geschrieben:
@ ts-soft
so ganz verstehe ich das programm nicht...

!
Es wird ein gemeinsamer Memory erstellt, den habe ich strukturiert,
deswegen mußte leider dort mit pointern arbeiten.
Mit
*Mem\Prog1 = "bla" oder
*Mem\Prog2 = "blub" werden die Werte
gesetzt. Diese können von allen Programmen, die diesen globalen Mem mit
dem String reserviert haben, gelesen und beschrieben werden.
If *Mem\Prog1 = "bla"
tue dies
else
tue das
endif
Die Structure kannste an Deine bedürfnisse anpassen, müssen keine
Strings sein, long usw. sind auch möglich. Müssen aber in den versch.
Programmen gleich sein.
Die andere Lösung ist wohl komplizierter, hab aber noch nicht mit
gearbeitet.
Spiel doch einfach mal mit dem Source, wirste dann auch hintersteigen,
denke ich mal

Verfasst: 14.02.2007 21:20
von Brügge
1mom!!
wenn ich Global *Mem.test = PBOSL_AllocateMemoryGlobal("MeinGemeinsamerSpeicher", SizeOf(test))
in das andere programm schreibe kann der also auf den memory bereich drauf zugreifen??
oder wie sage ich dem anderen programm wo es die daten herholt?
Verfasst: 14.02.2007 21:22
von Brügge
achja nochwas
wenn ich mit dem einen programm etwas hereinschriebe und gleichzeitig mit dem anderen etwas heraushole kommt dann ein error? oder wie geht das?
Verfasst: 14.02.2007 21:30
von ts-soft
Brügge hat geschrieben:
wenn ich Global *Mem.test = PBOSL_AllocateMemoryGlobal("MeinGemeinsamerSpeicher", SizeOf(test))
in das andere programm schreibe kann der also auf den memory bereich drauf zugreifen??
Ja, jedes Programm das auf diese Art und mit diesem String "MeinGemeinsamerSpeicher" (besser ändern) Speicher allokiert, kann darauf zugreifen!
Brügge hat geschrieben:
oder wie sage ich dem anderen programm wo es die daten herholt?
Das ist in jedem Programm gleich. Vielleicht sollte Programm 1 *mem\Prog1 lesen und *mem\Prog2 schreiben, und Programm 2 umgekehrt
Das da nichts durcheinander gerät, sollte Windows regeln.
Verfasst: 14.02.2007 21:35
von Brügge
habe jetzt ein bisschen mit deinen programm rumgefuchtel es geht!!!!!
Du hast meine LAN gerettet!!
THX!
MFG BRÜGGE
Verfasst: 14.02.2007 21:42
von ts-soft
Der einzige Nachteil ist, es wird kein Ereignis ausgelöst, wenn der Speicher
verändert wird. Mußt also regelmässig selber schecken was drinne steht, z.B.
mit einem Timer wie im Beispiel.
Verfasst: 01.04.2008 20:58
von P1TBULL
ts-soft hat geschrieben:Hab mal ein Beispiel mit GlobalMemory erstellt, IMHO das einfachste.
Code: Alles auswählen
Structure test
Prog1.s{255}
Prog2.s{255}
EndStructure
Global *Mem.test = PBOSL_AllocateMemoryGlobal("MeinGemeinsamerSpeicher", SizeOf(test))
Procedure TimeProc(hWnd.l, uMsg.l, idEvent.l, dwTime.l)
Static MyVar.s
If idEvent = 1
If MyVar <> *Mem\Prog1
MyVar = *Mem\Prog1
Debug MyVar
EndIf
EndIf
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 200, "")
SetTimer_(WindowID(0), 1, 1000, @TimeProc()); alle sekunde auf änderungen Testen
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 80, 30, "Random")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget() = 0
*Mem\Prog1 = "Test " + Str(Random(1000))
EndIf
EndSelect
ForEver
EndIf
EndIf
PBOSL_FreeMemoryGlobal(*Mem)
// Nachtrag:
2x mit externen Debugger starten, damit man es sieht
Hallo, soweit funktioniert alles bei mir. Leider weiß ich nicht wie groß die Variablen werden die ich mit AllocateMemoryGlobal im speicher ablegen will. Gibt es eine Möglichkeit die Größe variabel zu halten?
Ich geh doch mal davon aus dass die {255} für die Größe steht. Wenn ich das weglasse bekomme ich einen falschen Wert.
Mfg
Verfasst: 01.04.2008 21:17
von NicTheQuick
Vielleicht so:
Code: Alles auswählen
Structure test
Changed1.l
Size1.l
*pData1.l
Changed2.l
Size2.l
*pData2.l
EndStructure
Global *mem.test = PBOSL_AllocateMemoryGlobal("MeinGemeinsamerSpeicher", SizeOf(test))
Procedure PBOSL_ReAllocateMemoryGlobal(*mem, memstr.s, Size.l)
If *mem : PBOSL_FreeMemoryGlobal(*mem) : EndIf
ProcedureReturn PBOSL_AllocateMemoryGlobal(memstr, Size)
EndProcedure
Procedure TimeProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
Static MyVar.s
Protected i.l, s.s
If idEvent = 1
If *mem\Changed1
s = "Random 1: "
For i = 0 To *mem\Size1 - 1
If i : s + ", " : EndIf
s + Str(PeekL(*mem\pData1 + i * SizeOf(Long)))
Next
Debug s
*mem\Changed1 = #False
EndIf
If *mem\Changed2
s = "Random 2: "
For i = 0 To *mem\Size2 - 1
If i : s + ", " : EndIf
s + Str(PeekL(*mem\pData2 + i * SizeOf(Long)))
Next
Debug s
*mem\Changed2 = #False
EndIf
EndIf
EndProcedure
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 200, "")
SetTimer_(WindowID(0), 1, 1000, @TimeProc()); alle sekunde auf änderungen Testen
If CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 80, 30, "Random 1")
ButtonGadget(1, 10, 50, 80, 30, "Random 2")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
r = Random(20) + 1
*mem\Size1 = r
*mem\pData1 = PBOSL_ReAllocateMemoryGlobal(*mem\pData1, "ntq dynamic memory 1", r * SizeOf(Long))
While r
r - 1
PokeL(*mem\pData1 + r * SizeOf(Long), r)
Wend
*mem\Changed1 = #True
Case 1
r = Random(20) + 1
*mem\Size2 = r
*mem\pData2 = PBOSL_ReAllocateMemoryGlobal(*mem\pData1, "ntq dynamic memory 2", r * SizeOf(Long))
While r
r - 1
PokeL(*mem\pData2 + r * SizeOf(Long), r)
Wend
*mem\Changed2 = #True
EndSelect
EndSelect
ForEver
EndIf
EndIf
PBOSL_FreeMemoryGlobal(*mem)
Verfasst: 02.04.2008 20:21
von P1TBULL
Hallo,
erstmal danke für deine Antwort. Aber ich glaub ich stell mich ein bisschen dumm an
Also bei meiner Variable handelt es sich um einen String und da es sich um einen Text handelt der mit der Zeit größer wird weiß ich nicht wie ich das mit dieser Globalen Variable bzw. der Größenangabe machen soll.
Sorry das ich so oft nachfragen muss!
Greetz