Ich besitze nun PB 4.10
jo habe ich auch, in den Threads sind reine Berechnungen drinne wie z.B. Wegfindung.
Ich werde nun mal stück für stück ganze Codebereiche "abschalten", um so den Fehler einzugranzen ...
Ich werde nun mal stück für stück ganze Codebereiche "abschalten", um so den Fehler einzugranzen ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Ich brauchte auch erst 'ne ganze Weile bis ich in Punkto Threadsafe einigermaßen sattelfest war.
Schau mal bei Dir nach ... die meisten Probleme machen Linked-Lists und natürlich Strings.
Zugriffe auf solche Dinge musst Du mit Hilfe von "LockMutex()" kugelsicher machen.
Schau mal bei Dir nach ... die meisten Probleme machen Linked-Lists und natürlich Strings.
Zugriffe auf solche Dinge musst Du mit Hilfe von "LockMutex()" kugelsicher machen.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
ja, habe ich alles, ich verwende dafür die WIN-API, da ich das in 3.3 auch tat und es ja in 3.3 damit super funtzte.
Ich habe jetzt wirklich alles "abgeschaltet" sodass nur noch das hier hatte:
Alle Threads wurde nicht gestartet, und das da oben ist das einzige was läuft wenn ich Alt-Tabe, trotzdem stürzt das Programm ab.
Daraus schließe ich das alleine die "anwesenheit" von irgendwelchen Codestücken in der EXE diesen Absturz verursachen, was das jedoch ist weiß ich nicht -.-
Ich habe jetzt wirklich alles "abgeschaltet" sodass nur noch das hier hatte:
Code: Alles auswählen
Repeat
Delay(1)
FlipBuffers()
If IsScreenActive()
ClearScreen(0)
EndIf
ForEver
Daraus schließe ich das alleine die "anwesenheit" von irgendwelchen Codestücken in der EXE diesen Absturz verursachen, was das jedoch ist weiß ich nicht -.-
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Achso... Danke für die Info!PureLust hat geschrieben:@AND51:Genau das habe ich auch immer gedacht - und genau da lag mein Denkfehler.AND51 hat geschrieben:Du darfst nur zeichnen und flippen, solange der OpenScreen() den Fokus hat...
Man darf nur ZEICHNEN wenn der Screen aktiv ist - FLIPPEN muss man jedoch IMMER.
Aber wieso? Wenn ich Bock habe, kann ich doch nen Screen öffnen und erstmal ein paar Minuten lang irgendwelche Sprites laden, drehen, etc, ohne dass solange der Screen geflippt wird; dann stürzt das Programm doch auch nicht gleich ab, oder? Und ob ich eine Flip-Pause einlege und dabei Sprites zeichne, Dateien öffne/schreibe oder einfach Delay() mach, das ist doch egal.
Oder ist das immernoch ein Denkfehler?

PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
also, mal meine Ansicht:
der Debugger (sowohl 3.3 als auch 4.x) meckern beim wechsel zum Desktop an den Stellen:
Start/Stop Drawing/3D
Die Exe stürtzt auch nicht ab wenn du es trotzdem Compilierst und die Debugger raus lässt.
Aber hier ist halt das Problem das es irgendein Fehler DIRECKT beim Flippen gibt, denn auch wenn ich "nix" machen kackt das ding im SafeMode einfach ab, weil er irgendwo hinschreiben will wo er nicht darf. (vllt weil ThreadSafe irgend ein Bereicht schützt ...)
Ich habe selber auch nie IsScreenActive() benutzt und meine Spiele liefen trotzdem, (bis auf dem Grafik bug, was aber nichts mit dem hier zu tun hat)
der Debugger (sowohl 3.3 als auch 4.x) meckern beim wechsel zum Desktop an den Stellen:
Start/Stop Drawing/3D
Die Exe stürtzt auch nicht ab wenn du es trotzdem Compilierst und die Debugger raus lässt.
Aber hier ist halt das Problem das es irgendein Fehler DIRECKT beim Flippen gibt, denn auch wenn ich "nix" machen kackt das ding im SafeMode einfach ab, weil er irgendwo hinschreiben will wo er nicht darf. (vllt weil ThreadSafe irgend ein Bereicht schützt ...)
Ich habe selber auch nie IsScreenActive() benutzt und meine Spiele liefen trotzdem, (bis auf dem Grafik bug, was aber nichts mit dem hier zu tun hat)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
@AND51:
Natürlich kannst Du diverse Dinge machen ohne dabei nun alle 1/60 Sekunde (oder so) einen FlipBuffer ausführen zu müssen.
Wie jedoch in den oberen beiden verlinkten Posts bereits beschrieben wird der Status von IsScreenActive() nur in einem FlipBuffers() aktualisiert.
Du MUSST also einen FlipBuffers() durchführen um den aktuellen Zustand des Screens heraus zu finden - Du darfst aber KEINESFALLS irgendwelche Ausgabebefehle ausführen wenn der Screen inaktiv ist.
Eine stabile Schleife sieht im Grunde so aus wie 3 Posts zuvor von STARGÅTE geschrieben.
Also erst ein FlipBuffers() und danach alle Befehle die irgendetwas mit der Ausgabe zu tun haben durch eine IsScreenActive()-Abfrage schützen.
@STARGÅTE:
Schau Dir evtl. nochmal mein Asteroids an und wechsle dort mit (f) in der FullScreen-Modus.
Im FullScreen-Modus muss ich mich dann halt auch mit IsScreenActive() herum schlagen und darum kümmern das bei inaktivem Screen keine Ausgabe mehr erfolgt.
Und da ich in Asteroids auch mit Threads arbeite ist es u.U. in etwa vergleichbar mit Deinem Projekt.
Aber wie Du dort sehen kannst läuft die Alt-Tab Umschaltung problemlos und stabil.
Wie gesagt ... ich hatte auch erst lange tüfteln müssen bis ich die richtige Anwendung von IsScreenActive() und natürlich auch von Threads verstanden haben.
Zuvor hatte ich auch erst alles auf PB, den Debugger oder die Threads geschoben.
Nachdem ich dann aber die Feinheiten begriffen hatte und diese nun beachte, läuft alles stabil.
Wenn Du's aber partu nicht hinbekommst kannst Du mir auch gerne mal ein Stück aus Deinem Code schicken an dem man das beschriebene Problem nachvollziehen kann - ich schau dann gerne mal rein.
Noch'n Tip zu den Befehlen Start/Stop Drawing/3D die bei Dir die Probleme machen:
Auch diese dürfen natürlich nur bei AKTIVEM Screen ausgeführt werden - müssen also innerhalb der IsScreenActive()-Bedingung erfolgen.
Gruß und FF,
PL.
Natürlich kannst Du diverse Dinge machen ohne dabei nun alle 1/60 Sekunde (oder so) einen FlipBuffer ausführen zu müssen.
Wie jedoch in den oberen beiden verlinkten Posts bereits beschrieben wird der Status von IsScreenActive() nur in einem FlipBuffers() aktualisiert.
Du MUSST also einen FlipBuffers() durchführen um den aktuellen Zustand des Screens heraus zu finden - Du darfst aber KEINESFALLS irgendwelche Ausgabebefehle ausführen wenn der Screen inaktiv ist.
Eine stabile Schleife sieht im Grunde so aus wie 3 Posts zuvor von STARGÅTE geschrieben.
Also erst ein FlipBuffers() und danach alle Befehle die irgendetwas mit der Ausgabe zu tun haben durch eine IsScreenActive()-Abfrage schützen.
@STARGÅTE:
Schau Dir evtl. nochmal mein Asteroids an und wechsle dort mit (f) in der FullScreen-Modus.
Im FullScreen-Modus muss ich mich dann halt auch mit IsScreenActive() herum schlagen und darum kümmern das bei inaktivem Screen keine Ausgabe mehr erfolgt.
Und da ich in Asteroids auch mit Threads arbeite ist es u.U. in etwa vergleichbar mit Deinem Projekt.
Aber wie Du dort sehen kannst läuft die Alt-Tab Umschaltung problemlos und stabil.
Wie gesagt ... ich hatte auch erst lange tüfteln müssen bis ich die richtige Anwendung von IsScreenActive() und natürlich auch von Threads verstanden haben.
Zuvor hatte ich auch erst alles auf PB, den Debugger oder die Threads geschoben.
Nachdem ich dann aber die Feinheiten begriffen hatte und diese nun beachte, läuft alles stabil.
Wenn Du's aber partu nicht hinbekommst kannst Du mir auch gerne mal ein Stück aus Deinem Code schicken an dem man das beschriebene Problem nachvollziehen kann - ich schau dann gerne mal rein.
Noch'n Tip zu den Befehlen Start/Stop Drawing/3D die bei Dir die Probleme machen:
Auch diese dürfen natürlich nur bei AKTIVEM Screen ausgeführt werden - müssen also innerhalb der IsScreenActive()-Bedingung erfolgen.
Gruß und FF,
PL.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
3.3 ist für mich auch noch lange nicht gestorben.
3.3 werde ich für kleine sachen weiterhin verwenden, weil dort manche Befehle besser ware/sind.
@PureLust
ich werde weiter in meinem Code suchen.
In einem "normalen Code" läuft es ja mit IsScreenActive super, aber halt nur nicht bei dem speziellenm fall, aber ich habe ja n menge Zeit den Fehler zu suchen ^^
3.3 werde ich für kleine sachen weiterhin verwenden, weil dort manche Befehle besser ware/sind.
@PureLust
ich werde weiter in meinem Code suchen.
In einem "normalen Code" läuft es ja mit IsScreenActive super, aber halt nur nicht bei dem speziellenm fall, aber ich habe ja n menge Zeit den Fehler zu suchen ^^
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr