Seite 2 von 4
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:14
von diceman
Code: Alles auswählen
If Not InitSprite()
Debug "InitSprite() failed"
End
EndIf
If Not (OpenWindow(1,10,10,800,600,"hello.exe") = 0 Or OpenWindowedScreen(WindowID(1),0,0,800,600))
Debug "OpenWindow() failed"
End
EndIf
InitMouse()
Repeat
ClearScreen(RGB(0,0,0))
ExamineMouse()
If StartDrawing(ScreenOutput())
DrawText(MouseX(),MouseY(),"*")
If MouseButton(#PB_MouseButton_Left)
DrawText(MouseX(),MouseY(),Str(MouseX())+","+Str(MouseY()))
EndIf
StopDrawing()
EndIf
FlipBuffers()
WaitWindowEvent()
Until MouseButton(#PB_MouseButton_Right)
End
Okay, das funktioniert.

Nur so ganz verstehen tue ich den Befehl nicht. Also was er wirklich leistet. In der Hilfe steht zudem, daß man nicht WindowEvent() verwenden sollte, sondern WaitWindowEvent([Timeout]).
Sie muss mit Vorsicht benutzt werden, da sie bei fortlaufender Verwendung - anders als WaitWindowEvent() - anderen Programmen während des Wartens auf ein Ereignis keine Rechenzeit zur Verfügung stellt und damit alle CPU-Power verbraucht. In diesem Fall sollte innerhalb der Schleife entweder Delay() oder WaitWindowEvent() mit einem niedrigen Timeout-Wert verwendet werden.
Wie gesagt, ich würde gerne auch verstehen, was genau ich da tue - und was ist ein niedriger Timeout-Wert? 1? 100?
Wenn ich nebenbei die Systemauslastung mit dem Taskmanager überprüfe, sehe ich bei beiden Befehlen keinen großen Unterschied - die schwankt zwischen 3 und 5%.
Das sind halt alles Dinge, mit denen ich mich bei Blitzbasic niemals auseinandergesetzt habe (und auch nicht mußte), und die mich jetzt in den Allerwertesten beißen.
Trotzdem schonmal Danke für die Hilfe; will hier eigentlich auch nicht groß rumspammen, nur eine Entscheidung treffen!
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:19
von ccode_new
Ach Kinder ...
gerade wegen solchen Sachen könnte PureBasic gerade wieder sonst wo hin befördern und für die Spieleprogrammierung für nichtig erklären.
Ich habe gerade das Programm versucht unter Linux Mint 18.3 das Programm mit einem Windows Screen zu testen, dabei habe ich gedacht: Soll ich jetzt lachen oder weinen ?
...PureBasic bringt mir gar keinen Screen mehr. OpenScreen wirft einen Error!!! Habe das unter mit anderen Beispielen getestet und dasselbe. Kommisch, aber jedes anderes Spiel läuft ? Dann habe ich gesehen das ich den Grafiktreiber unter Linux auf NVidia gestellt haben und PureBasic einfach zu dumm ist mit diesem Treiber zu rendern. Ein SDL-C Programm oder andere Linux-Spiele funktionieren aber mit dem Linux-Nvidia-Treiber. Nur PureBasic ist einfach zu Dumm diesen Treiber anzusprechen.
Ich habe den Grafiktreiber dann wieder auf Intel (Power Saving Mode) umgestellt und PureBasic rendert wieder schön auf einen Screen.
So ein Scheiß!!!!
Und es geht ja damit erst richtig los:
Um die PureBasic-Mausfunktionen würde ich einen meilenweiten Bogen schlagen und die SDL direkt (nur bei Linux) verwenden.
Außerdem hast du ExamineMouse() innerhalb von StartDrawing() geschrieben!!! Das ist falsch!
0000...sollte auch RGB(0,0,0) heißen.
Damit sind wir wieder bei einfach ist bei PureBasic manchmal einfach nur schwer.
Anbei: Der Ärger ist mehr an PureBasic unter Linux gerichtet und soll denn Spaß bei PureBasic unter Windows nicht beeinträchtigen.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:26
von diceman
ccode_new hat geschrieben:
Um die PureBasic-Mausfunktionen würde ich einen meilenweiten Bogen schlagen und die SDL direkt (nur bei Linux) verwenden.
Okay, warum?

Und was bedeutet "SDL direkt verwenden"? Sorry, wenn's 'ne doofe Frage ist, aber trotz grundlegendem Verständnis von der Materie sind viele Informatik-Begriffe immer noch Bahnhof für mich.
ccode_new hat geschrieben:0000...sollte auch RGB(0,0,0) heißen.
Danke!
ccode_new hat geschrieben:
Außerdem hast du ExamineMouse() innerhalb von StartDrawing() geschrieben!!! Das ist falsch!
Habe ich schon selbst gefixt, war ein Bauchgefühl.
Andererseits, was keinen Fehler produziert, ist für mich erstmal richtig.

Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:45
von mk-soft
Erst mal ein wenig in die Grundlagen einarbeiten und wenn es klemmt einfach hier fragen.
SDL ist eine Library von Linux die Purebasic in Linux verwendet...
P.S.
Ausserdem gibt es noch ein example Ordner.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:50
von ccode_new
An "diceman":
SDL siehe hier:
https://de.wikipedia.org/wiki/Simple_DirectMedia_Layer
Meine Probleme sollen aber nicht deine Probleme sein.
Solange du auf Portierung schei.. kann es dir egal sein.
Unter Windows kann man PureBasic auch ohne allzu viel Gefrickel für OpenScreen-Anwendungen (Spiele) nutzen.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 19:54
von diceman
mk-soft hat geschrieben:Erst mal ein wenig in die Grundlagen einarbeiten und wenn es klemmt einfach hier fragen.
SDL ist eine Library von Linux die Purebasic in Linux verwendet...
Danke, werde ich tun.

Grafik-Ausgabe ist mir jedenfalls sehr wichtig - wenn das nicht zufriedenstellend und (einigermaßen intuitiv) funtzt, dann ist das keine Sprache für mich.

Und ihr habt mir schonmal sehr geholfen - die erste Hürde ist genommen.
@coode_new
Ja, du hast mir schon Angst gemacht.

War nämlich gerade stolz, was auf die Beine gestellt zu haben.
Ich bleibe mal dran - die Woche
gimpe ich noch'n bißchen mit der Demo rum, und wenns dann einigermaßen fluppt mit mir und PureBasic, dann ist mir die Vollversion den Preis auch wert.
Tut mir Leid, daß es bei dir nicht so läuft, wie es sollte!
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:02
von mk-soft
ccode_new hat geschrieben:An "diceman":
Solange du auf Portierung schei.. kann es dir egal sein.
Unter Windows kann man PureBasic auch ohne allzu viel Gefrickel für OpenScreen-Anwendungen (Spiele) nutzen.
Gerade etwas über ein Jahr dabei und meckern. Das geht auch anders. Scheint aber heutzutage normal zu sein 'Scheiß, Dreck, etc' zu verwenden.
Zum Beispiel:
Bei Linux hatte ich einige Probleme mit den verschiedene Konfigurationen gehabt. Dafür habe ich aber Lösungen gefunden
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:16
von TroaX
WaitWindowEvent ist eine Prozedur, die auf ein Event innerhalb eines Fensters wartet. Wird ein Timeout angegeben, wird nach dieser Anzahl an Millisekunden das warten abgebrochen und den nächsten Schleifendurchlauf durchgeführt.
Bei WindowEvent wird einfach in der Event-Warteschlange das nächste Fenster-Event zurückgeliefert. Gibt es kein Event, gibt es auch keins zurück. Dadurch, das WindowEvent aber nicht wartet, verbraucht dein Programm die komplette Rechenzeit AUF EINEN LOGISCHEN PROZESSOR! Dieser liegt dann für andere Prozesse so gut wie lahm.
Je mehr Kerne ein System hat, um so geringer fällt die Last auf das gesamte System aus. Wenn du einen 8 Kern CPU mit 16 Threads (SMT bzw. Hyperthreading) hast, dann kann dein Programm, da es nur auf einem Thread läuft, maximal nur 6,25 % Systemleistung verbrauchen (100 / 16). Trotzdem verbraucht es dabei die Ressourcen eines kompletten logischen Prozessors. Bei meinem Notebook (i5 mit 2 Kernen und 4 Threads) wären es maximal 25 %.
Durch WaitWindowEvent wird während des wartens die Prozessorzeit wieder freigegeben und kann dabei von anderen Prozessen verwendet werden.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:20
von ccode_new
@diceman
Sorry, diceman für meine forsche Art die Tastatur zu missbrauchen um solch unanständiges Vokabular zu verbrechen.
@mk-soft
Danke für den Hinweis.
Re: Blitzbasic-Hobby-Progger will umschulen
Verfasst: 04.02.2018 20:46
von Kurzer
TroaX hat geschrieben:Bei WindowEvent wird einfach in der Event-Warteschlange das nächste Fenster-Event zurückgeliefert. Gibt es kein Event, gibt es auch keins zurück. Dadurch, das WindowEvent aber nicht wartet, verbraucht dein Programm die komplette Rechenzeit AUF EINEN LOGISCHEN PROZESSOR! Dieser liegt dann für andere Prozesse so gut wie lahm.
Gilt das eigentlich auch, wenn er OpenWindowedScreen mit dem Flag #PB_Screen_WaitSynchronization nutzt?
Ich hätte gedacht, dass ein Schleifendurchlauf dann bei Flipbuffers() auf die Screen-Synchronisation wartet. Also je nach Einstellung des Monitors z.B. nur 60 Schleifendurchläufe pro Sekunde erfolgen (wenn der TFT mit 60 Hz angesprochen wird).
@Diceman: Wenn das nicht so ist, dann ist das in etwa so eine Schleife wie
10: Print "*"
20: Goto 10
Die wird dann immer wieder durchgebrettert, und zwar so schnell wie es deine CPU (bzw. 1 Kern davon) schaffen kann. Deshalb ist dieser Kern dann mit 100% ausgelastet. Vermutlich wird Dein Sternchen "*" dann aber auch rekordverdächtige zig-tausendmal pro Sekunde gezeichnet.