Blitzbasic-Hobby-Progger will umschulen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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. :wink:
Trotzdem schonmal Danke für die Hilfe; will hier eigentlich auch nicht groß rumspammen, nur eine Entscheidung treffen!
Zuletzt geändert von diceman am 04.02.2018 19:31, insgesamt 2-mal geändert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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. ;)
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Zuletzt geändert von mk-soft am 04.02.2018 19:50, insgesamt 1-mal geändert.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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. :oops: 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!
Zuletzt geändert von diceman am 04.02.2018 20:13, insgesamt 1-mal geändert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
mk-soft
Beiträge: 3695
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
TroaX
Beiträge: 660
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Blitzbasic-Hobby-Progger will umschulen

Beitrag 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.
Zuletzt geändert von Kurzer am 04.02.2018 20:52, insgesamt 2-mal geändert.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten