Ich besitze nun PB 4.10

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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 ...
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
Benutzeravatar
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

Beitrag von PureLust »

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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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:

Code: Alles auswählen

Repeat
 
 Delay(1)
 
 FlipBuffers()
 If IsScreenActive()

  ClearScreen(0)

 EndIf
 
ForEver
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 -.-
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
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

PureLust hat geschrieben:@AND51:
AND51 hat geschrieben:Du darfst nur zeichnen und flippen, solange der OpenScreen() den Fokus hat...
Genau das habe ich auch immer gedacht - und genau da lag mein Denkfehler.
Man darf nur ZEICHNEN wenn der Screen aktiv ist - FLIPPEN muss man jedoch IMMER.
Achso... Danke für die Info!

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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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)
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
Benutzeravatar
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

Beitrag von PureLust »

@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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Beitrag von 7x7 »

Gratulation an STARGÅTE. Gehört das aber nicht eher in die 'Laberecke' als
in 'Ankündigungen' ?
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

7x7 hat geschrieben:Gehört das aber nicht eher in die 'Laberecke' als
in 'Ankündigungen' ?
wenn STARGÅTE mit PB4.1 programmiert, dann ist das schon eine Ankündigung wert ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Vermilion
Beiträge: 1846
Registriert: 08.04.2006 16:00
Computerausstattung: Apple iMac (2010) & HP Notebook
Wohnort: Heidekreis

Beitrag von Vermilion »

:bounce: Glückwunsch. Es klingt vielleicht doof, aber du warst immer die erste Assoziation wenn ich irgendwie an PureBasic 3.30 gedacht habe! :lol: Umgekehrt war es dann Dune, und danach erst PureBasic 3.30.
Bild

Immer die neueste PureBasic Version. Auf allem Betriebssystemen. Ich bin ein OS-Nomad!
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

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 ^^
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
Antworten