Variablen austausch zwischen zwei Programmen?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

danke JA!

ich setzt das mal um.
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
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

Beitrag von ts-soft »

Statt Timeout evtl. meinem Ratschlag mit TimerCallback folgen.
Timerbeispiele hab ich ja bereits genug gepostet, einfach mal suchen.
Ist im Endeffekt dasselbe wie Timeout, funktioniert nur zuverlässiger, aber
Windows only.

/edit
http://www.purebasic.fr/german/viewtopi ... 165#225165
In die Procedure "mytimercallback" das flippen usw. und das Inverval von
1000 auf z.B. 20 setzen.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ok... das problem stellt sich mir so dar:

das Delay(30) sorgt dafür, dass dein loop nur 33x pro sekunde durchlaufen kann.
sämtliche events vom erstellen der gadgets und
auch sämtliche zwischendrin erzeugte events wie z.b. durch SetGadgetText
müssen aber abgearbeitet werden.

ebenso das FlipBuffers direkt in der Eventschleife bremst auf so viele durchläufe wie die FrameRate zuläßt.

also

1. das Delay(30) raus und WindowEvent() durch WaitWindowEvent(30) ersetzen und
2. die ganze Screenaction inclusive FlipBuffers in ein If Event = #Null einschließen

dadurch erreichst du, dass deine Aufbau- und Aktualisierungsevents schnellstmöglich abgearbeitet werden,
und dass nur dann Screenaction durchgeführt wird und auf den VSync gewartet, wenn kein Event anliegt.

das sollte das Problem beheben.
statt des Ifs könntest du auch Screenaction und Eventloop komplett trennen,
wie im Beispiel von STARGÅTE angedeutet.

noch professioneller wäre tatsächlich ein TimerCallback wie ts vorschlug,
aber das würde eben auch bedeuten, alle Screenaction in eine Procedure zu packen,
da musst du wieder die Kommunikation von GUI-Einstellungen und Screenelementen einrichten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

sorry. fals ich nun ganz bescheuert frage. aber ihr seid na nix anderes von mir gewohnt.
ist das so gemeint?
und zwar innerhalb der Repeat Schleife für

Event=WaitWindowEvent(10)
If Event=#Null
FlipBuffers() ; Inverse the ...
ClearScreen(#Gray)

+;{ Karte Zeichnen

+;{ Gitter Zeichnen

+;{ Rechteck Zeichnen

EndIf
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

grundsätzlich ja.
ich würde noch drauf achten, die logische reihenfolge zu beachten.

Code: Alles auswählen

If Event=#Null
  ClearScreen(#Gray)

+;{ Karte Zeichnen

+;{ Gitter Zeichnen

+;{ Rechteck Zeichnen

  FlipBuffers() ; Inverse the ...
EndIf
ja ich weiß, in den Beispielcodes steht das auch anders drin.
... muss ich wohl doch mal überarbeiten ... *sigh*
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Habe das bei mir damals so gelöst, wie Windows es
im Prinzip mit seinen Fenstern macht..
Das FlipBuffers wird nur aufgerufen, wenn der Screen auch tatsächlich
neu gezeichnet werden muss, also wenn eine Mausbewegung im
Screenbereich stattfindet z.B.
Das senkt dann nochmal die gesamte Systemauslastung.


Der Vorschlag der anderen ist aber mit Sicherheit der Einfachere.


Du solltest beim WindowedScreen auch darauf achten, daß Du den
FlipBuffers (oder überhaupt Zeichenoptionen) nur benutzt, wenn
der Screen noch aktiv ist. Das ist nämlich nicht mehr der Fall, wenn
jemand Dein Programm minimiert. Dann gehen auch alle geladenen
Sprites verloren.
Momentan verbietest Du ja noch das minimieren..



Gruß
PureBasic 3.94 ; 4.2 ; 4.3
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> wenn jemand Dein Programm minimiert.
> Dann gehen auch alle geladenen Sprites verloren.

nein nein nein!

bitte keinen alten Kaffe erzählen, das war vielleicht mal in der 3.30 so, wenn überhaupt.

*grml*
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
GreyEnt
Beiträge: 376
Registriert: 20.07.2006 19:41

Beitrag von GreyEnt »

So. Hab dann mal die änderungen erledigt.
download unter dem alten Link.
Aber ne besserung für den Fensteraufbau ist nicht zu sehen.

Das Delay ist raus. Dafür hab ich dann das WaitWindowEvent eingeführt.
Die Event abfrage läuft in einer eigenen Repeat Schleife und wird beendet wenn Event=0 ist.
Die Screen-Operationen sind zusammengefasst und auch in der Repeat Schleife für die Event abfrage intigriert.

Nun ist das alles ja nicht so schlimm weil es ja läuft.
Aber ich denke schon das an meinem Programm etwas nicht stimmen muß. Weil so einen langsamen aufbau hab ich noch nie gesehen. Hat jemand von euch eine Vergleichbare Anwendung?
Ich progge PureBasic weil Jägermeister nen dicken Kopf macht.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Die Event abfrage läuft in einer eigenen Repeat Schleife und wird beendet wenn Event=0 ist.
> Die Screen-Operationen sind zusammengefasst und auch in der Repeat Schleife für die Event abfrage intigriert.

das ist doppelt gemoppelt.

entweder du hast eine interne Eventschleife die auf Event = #Null endet,
dann stehen deine screensachen hinter dieser schleife, innerhalb der umfassenden Hauptschleife,
oder du hast innerhalb der kombinierten Event-/Game-Hauptschleife ein If Event = #Null drin, in dem die Screensachen drin stehen.

wenn du sehr viele Gadgets hast, kann der erste Fensteraufbau ziemlich verlangsamt sein, das Problem wurde schon oft berichtet.
da hilft es oft, die Eventqueue vor der Hauptschleife zu "spülen",
und man kann den langsamen Aufbau verbergen, indem man das Fenster unsichtbar öffnet,
und erst unmittelbar vor der Hauptschleife, nach dem Eventflushen, sichtbar macht.

ich schau noch mal rein (lads jetzt mal runter) aber es ist leider auch nicht sehr übersichtlich,
weil du - sorry - echt viel zu sparsam eingerückt hast(!)
es ist sehr sehr schwierig, zuverlässig korrespondierende if/endif paare zu ermitteln.

PS:
ich muss erstmal essen... frühestens in ner Stunde kann ich mal reingucken.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag von Ja! »

Kaeru Gaman hat geschrieben:> wenn jemand Dein Programm minimiert.
> Dann gehen auch alle geladenen Sprites verloren.

nein nein nein!

bitte keinen alten Kaffe erzählen, das war vielleicht mal in der 3.30 so, wenn überhaupt.

*grml*
Cool bleiben :-)
Obwohl kein Anfänger, bin auch ich vor Falschaussagen nicht gefeit..

Mein Stand ist PBv3.9x, da hatte ich das Problem mit den Sprites noch.

Ab 4.x ist das also Geschichte?
PureBasic 3.94 ; 4.2 ; 4.3
Antworten