Deutsch
Forum

Hilfe! - Ich verzweifle langsam - Nachladen von Dateien im Hintergrund

 

Tango
Jetzt bin ich mit meinem Latein am Ende. Ich bekomme es einfach nicht hin. Wie kann ich denn Dateien, Bilder, Texte im Hintergrund nachladen? Geht das überhaupt und wenn ja, wie? Mir fehlt einfach der Ansatz dazu.

Alle Versuche die ich gemacht habe legen sämtliche Animationen lahm bis sie geladen sind.

Wie kann man das prinzipiell lösen?
 
09.03.2017  
 




Georg
Teles
Tag,

sag mal genau, was Du vor hast, am besten mit einem Beispiel und welche Profanversion Du benutzt. Soweit ich weiss, gibt es eine Hilfedatei bei xProfan bei, such dort zB nach Bildhandle

Ich melde mich später, wenn ich daheim bin.

Servus
 
XProfan X3
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

10.03.2017  
 




Tango
Georg Teles (10.03.2017)
Tag,

sag mal genau, was Du vor hast, am besten mit einem Beispiel und welche Profanversion Du benutzt. Soweit ich weiss, gibt es eine Hilfedatei bei xProfan bei, such dort zB nach Bildhandle

Ich melde mich später, wenn ich daheim bin.

Servus


Hallo Georg,

ich habe große Probleme meine Diashow auf OpenGL-Basis flüssig zu betreiben. Die oGL-Geschichte läuft super und auch so wie ich mir das gedacht habe. Lade ich nun eine Bilderserie oder auch nur ein Bild, stoppt sämtliche Animation und zwar so lange bis das/die Bild(er) geladen sind/ist. Danach klappt alles. Deshalb war meine Überlegung die Bilderserie ebend im Hintergrund in den Speicher zu laden während die Animation im Vordergund schon läuft und etwas Anderes Zeigt als die Bilder.

Ich hänge mal meinen kompletten Wurstel-Test-Code an.

Wen Du den Testest lege mal im Programmverzeichnis die folgenden Ordner an:

X:/Programmverzeichnis/Bilder/1/1.....20.jpg etc.

und einen Ordner namens Sound und packe dort eine mp3 mit "1.mp3" hinein.

Achso: Ich benutze Xprofan 3.1
Var anzahl% = 0
Var position! = 25
Var color! = 0
Declare hfont&, font&
Declare Ende%, die%'Variable für Abbruchbedingung
Declare pos!, rot!'Positions- und RotationsVariablen
Declare textur%, kugel#
Declare texture%[500]
Declare time&
declare r!
'Legt die Fensterform fest
'WindowStyle 64 + 16                                                                            'Fenster ohne Rahmen und
Window %MaxX, %MaxY'Fenster an Desktopauflösung anpassen
CLS 0
'Initialisiert OpenGL
oGL("Init", %hWnd, 0, 0, 0, 0)
oGL("BlendMode",1)
'oGL("LoadXPGL", "Linie.xpgl")                                                                   'Lädt Linienpunkte aus Datei Linie.xpgl
'oGL("UseXPGL", 1)                                                                               'Verwendet diese Linienpunkte
'Legt Lauftschrift fest
hfont& = create("Font", "Courier New", 32, 0, 0, 10, 0)'Lädt Font in Variable hfont&
font& = oGL("OutlineFont", hfont&, 0.3)'Weist hfont& oGL zu
deleteobject hfont&'Zerstört Objekt hfont& wieder, weil es nach Zuweisung nicht mehr benötigt wird
Verzeichnis 1'Liest Bilddaten ein
'Spielt Mukke ab
MIDI("Play", $ProgDir + "Sound\" + "1.mp3", -1)
SetTimer 5'max. 50 Frames /sek.

WhileNot ende%'Wenn keine Abbruchbedingung erkannt wurde, durchlauf des Timers

    If IsKey(27)'ist Abbruchbedingung "Escape-Taste" erfüllt, dann

        Ende% = 1'setzte Variable Ende% auf 1

    EndIf'und beende diese Abfrage

    'print "noch ein test"
    Case position! < -100 : position! = 25'Wenn Text hinter linkem Bildschirmrand verschwunden dann starte ihn wieder von Vorne
    Case color! = 90 : color!=1'Wenn Rotationswinkel 90Grad erreicht, dann auf 0 setzen
    OpenGL()'Zeichne derweil OpenGL

EndWhile'Springe zu WhileNot

KillTimer'Beende nach 5ms den Timer oder besser gesagt: Springe nach 5ms wieder zum SetTimer
End

Proc Verzeichnis

    Parameters Folder$'Die Parameterübergabe des aktuellen Verzeichnisses
    Var counter% = 0 : Var i% = 0'Zählvariablen zum Einlesen der Bilder
    Declare Datei$, bild&'Datei und Bildnummer
    Declare Pfad$, Bilder$'Pfad des aktuellen Verzeichnisses und Bilddaten in Vaiable speichern
    'Bildverzeichnis Initialisieren
    Pfad$ = $ProgDir + "Bilder\" + Folder$ + "\"
    ChDir Pfad$
    Pfad$ = Pfad$ + "*.jpg"
    Bilder$ = FindFirst$(Pfad$)
    AddFiles bilder$
    'sucht nach Bilder und weist Diese der Variable Bilder$ zu

    WhileNot %IOResult

        bilder$=FindNext$()
        addfiles bilder$
        inc counter%

    EndWhile

    'ordnet die geladenen Bilder dem TexturArray zu

    whilenot anzahl% = counter%

        DATEI$ = ListBoxItem$(anzahl%)
        bild& = Create("hsizedPic",-1,  Datei$,1280,1024,1)
        casenot bild& : continue
        texture%[i% + 1] = oGL("getTextureBMP",bild&,1)
        deleteObject bild&
        inc i%
        inc anzahl%

    endwhile

EndProc

proc OpenGL

    position! = position! - 0.05
    color! = color! + 0.05
    oGL("Clear")
    '  oGL("Origin", 0.0, 0.0, -9.0)                                                               'Setzt Position der XPGL-Linien
    '		oGL("DrawXPGL", 0, 4)                                                                       'Zeichnet ebend diese Linien
    oGL("Origin", 0, 0, -30)
    oGL("Color", cos(color!), sin(color!), 1 - 0.5*cos(color!/30), 1)
    oGL("Move", position!, 11.7, 0)
    oGL("Print", font&, "     DiaShow V1.0  lorem ipsum...........")
    'oGL("Fog",3,0,25 + sin(rotation!))
    oGL("Origin", 0, 0, -30)
    oGL("Color", cos(color!/10), sin(color!/3), 1 - 0.5*cos(color!), 1)
    oGL("Move", position!/0.7, -12.2, 0)
    oGL("Print", font&, "   lorem ipsum ................................................................    ")
    'Sprites
    'oGL("Origin", -3.4, -0.1, -6.0)
    'oGL("Color", 10, 10, 10, 1)
    'oGL("Quad", %MaxX, 0.1)
    'oGL("Origin", 0, 0, -12)
    'oGL("Draw", kugel#)
    'oGL("Origin", 0, 0, -6)
    '    oGL("Origin", 0, -4.5, -18)
    '    oGL("Draw", kugel#)

    if &GetTickCount - time& >= 5000'5 Sekunden sind rum

        r! = r! + 1
        case r! = anzahl% : r! = 1
        time&   = &GetTickCount

    endif

    'Bilder Laden
    oGL("Origin", 0, -4, -12)
    oGl("color",1,1,1,1)
    oGl("move",-5.8, 0, -7.5)
    oGL("Rotate", 0, 30, sin(color!))
    oGl("push")
    oGL("Texture", texture%[r!], 1)
    oGL("Quad", 13, 8)
    oGl("pop")
    oGL("Origin", 0, -4, -12)
    oGl("color",1,1,1,1)
    oGl("move",5.8, 0, -7.5)
    oGL("Rotate", 0, -30+sin(color!)/0.5, cos(color!))
    oGl("push")
    oGL("Texture", texture%[r!+2], 1)
    oGL("Quad", 13, 8)
    oGl("pop")
    oGL("Show")'Zeigt alle Objekte

EndProc

 
10.03.2017  
 




Georg
Teles
Tag,

wenn Du bereits etwas Anderes anzeigen willst während die Bilder geladen werden, gibt es verschidene Möglichkeiten:

Versuchen kannst Du mit Multiprocessing von XProfan, dass ein paralleler Prozess die Bilder lädt und der primäre die Animation übernimmt. Habe gerade kein Beispiel sry.

Callback Funktion kann man sich auch anschauen, habe leider auch kein Beispiel, muss basteln.

Hab aber was entdeckt: bei der Schleife zwischen SetTimer und KillTimer füge bitte ein WaitInput, so nimmt dein Programm die ganze Prozessorleistung
SetTimer 5'max. 50 Frames /sek.

WhileNot ende%'Wenn keine Abbruchbedingung erkannt wurde, durchlauf des Timers

    Waitinput'<- hier

    If IsKey(27)'ist Abbruchbedingung "Escape-Taste" erfüllt, dann

        Ende% = 1'setzte Variable Ende% auf 1

    EndIf'und beende diese Abfrage

    'print "noch ein test"
    Case position! < -100 : position! = 25'Wenn Text hinter linkem Bildschirmrand verschwunden dann starte ihn wieder von Vorne
    Case color! = 90 : color!=1'Wenn Rotationswinkel 90Grad erreicht, dann auf 0 setzen
    OpenGL()'Zeichne derweil OpenGL

EndWhile'Springe zu WhileNot

KillTimer'Beende nach 5ms den Timer oder besser gesagt: Springe nach 5ms wieder zum SetTimer
End
 
XProfan X3
TC-Programming [...] 
XProfan 8.0 - 10.0 - X2 - X3 - X4

10.03.2017  
 




Tango
Hallo auch,

habe grad die Hilfe bemüht. Es schein als wäre da Multiprocessing der richtige Weg. Doch verstehe ich nicht wirklich was man dort von mir will.
Aber ich denke, dass ich die LadeProc der Bilder in ein Modul packe, das läuft dann parallel zum Hauptprogramm und ich kann dann die Bilddaten an das Hauptprogramm zur Laufzeit übergeben.

Sehe ich das so richtig?

Verwirrend finde ich da nur die Auzssage bei Multiprocessing und Callback, "Das Programm macht erst weiter, wenn der Prozess beendet ist".

Damit habe ich doch das Gleiche in Grün oder?
 
10.03.2017  
 



Unterthema: Multiprozessing  [...]  erzeugt.
 
12.03.2017  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

7.063 Betrachtungen

Unbenanntvor 0 min.
Member 862464128.03.2024
RudiB.07.10.2022
Michael Hettner02.09.2021
Glubbfan24.03.2021
Mehr...

Themeninformationen

Dieses Thema hat 2 Teilnehmer:

Tango (4x)
Georg Teles (2x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie