Thread Problem: Bmax spinnt Total!

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

klin

Betreff: Thread Problem: Bmax spinnt Total!

BeitragDo, Mai 13, 2010 2:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute,
ich wollte das Laden meines Spieles ein wenig verschönern durch Thread. Also die Grafische oberfläche aktualisiert sich und spielt somit eine Animation ab und der Thread lädt alle Dateien.
Doch es ist leicht verwirrent, was für ein Ergebnis raus kommt.
Hier mal den abschnitt des Codes:
BlitzMax: [AUSKLAPPEN]

Function LoadFiles:Object(t:Object)

'Load Fonts
' - Arial - Lade die benötigten Schriftgrößen...
For Local x:Byte=14 To 72
Fonts[x]=LoadImageFont(getenv_("WINDIR")+"/Fonts/Arial.ttf",x)
Next

'Load Gui
Local GUI_File:TINI=TINI.Open(RootFloder+"kgui/standard.ini")
' - WIN - Windows
TINI.LoadGroup(GUI_File,"KGui","window")
KG_S.Add("win","close",TINI.GetVariableS(GUI_File,"close"))
'... wiederholt sich nur mit anderen Variablen....

KGui_Corners=LoadAnimImage(RootFloder+"kgui/"+KG_S.Req("win","corners"),16,16,0,4)
KGui_Close=LoadImage(RootFloder+"kgui/"+KG_S.Req("win","close"))
End Function


Meistens funktioniert das Laden einwandfrei! Doch öfters stürtzt der Thread (Also oberfläche läuft weiter) mit einem Memory_Access_viogedöhns ab. Das seltsame ist, nach ca. 7x kompilieren (OHNE ÄNDERUNGEN!) gehts. Doch dann wird eine bestimmte Schriftgröße einfach nicht geladen! Wenn ich einigemale kompiliere oder das Programm neustarte, bekomme ich das Glück, dass doch noch alles richtig geladen wird. Die Bilder werden jedoch jedesmal einwandfrei geladen ohne Probleme.

Das kann doch wohl nicht normal sein oder?! Hat jemand eine Lösung für das seltsame rätsel? Oder ist das leider ein Bmax Fehler und ich muss warten.. ? >.<

THX
MFG
Klin

Xeres

Moderator

BeitragDo, Mai 13, 2010 12:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gab meines Wissens noch keine großartige Verbesserung der Thread-Geschichte - die ist immer noch mehr experimentell zu sehen und hier und da verbugt.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

mpmxyz

BeitragDo, Mai 13, 2010 12:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Threadsystem von BlitzMax ist nicht gerade sehr ausgereift. Das Threadmodul sollte zwar keine Fehler haben, aber die anderen Module wurden nicht auf Threads optimiert.
Ich kann mir gut vorstellen, dass es bei Max2D nicht 100%ig funktioniert.
mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

BtbN

BeitragDo, Mai 13, 2010 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist nicht möglich, von mehr als einem Thread auf einen Grafik-Kontext zuzugreifen. Deshalb kann nur der Thread, der den Kontex geholt hat, auch auf ihn zugreifen(sprich dinge laden). Und da BMax ein eigenes caching-system nutzt, welches nur gelegentlich mal die bilder hochläd, kann es passieren, dass es einfach mal klappt, weil das hochladen erst im Main-Thread stattfindet, und dann auch einfach mal nicht klappt, weil irgendwas im thread das schon verursacht hat.

Der Eisvogel

BeitragDo, Mai 13, 2010 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei BM wurde ein Sample beigelegt, welche zeigt, wie man so etwas realisieren kann. Das funktioniert uahc einwandfrei. Schau dir das mal an, vielleicht hilft es dir ja.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group