"Aufhängen" verhindern beim Einlesen

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Sora

Betreff: "Aufhängen" verhindern beim Einlesen

BeitragFr, Okt 10, 2008 17:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich größere Datenmengen einlesen möchte um mit diesen umfangreichere Berechnungen anstelle, hängt sich das Programm ja immer zwangsläufig auf, bis der Vorgang zu Ende ist.
Kann ich das irgendwie vermeiden?

Also um das Problem zu veranschaulichen ein Bespiel (gibt natürlich keinen Sinn)

Code: [AUSKLAPPEN]
Import MaxGui.Drivers
Framework BRL.EventQueue


Local window:TGadget =CreateWindow("",40,40,320,240)
Local Button:TGadget=CreateButton("Einlesen xy",10,10,80,40, window)


While True
   WaitEvent 
      Select EventID()
      Case EVENT_WINDOWCLOSE
         End
        Case EVENT_GADGETACTION
        
   For i = 1 To 10
         Print  Einlesen("datei") 'dateien einlesen, hier jetzt einfach 10x die gleiche..
   Next
   
   End Select
Wend

Function Einlesen(Datei:String,buffer:Int=400000)

  Local fileStream:TStream = ReadStream(Datei$)
  Local buffPtr:Byte Ptr = MemAlloc(buffer)
   
   Repeat
   
      Local bytesRead = fileStream.Read(buffPtr, buffer)
   
        For Local a=0 Until bytesRead
         wertxy = (wertxy  Shr 8) ~ $FF ~(wertxy & $FF) 'irgendwas mit den eingelesenen Daten berechnen, hier gibts natürlich keinen Sinn
      Next
   
   
   Until Eof(FileStream)
   
   CloseStream FileStream
   MemFree(buffPtr)
   Return wertxy
   
End Function

ChaosCoder

BeitragFr, Okt 10, 2008 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt natürlich drauf an, ob du sofort alle Daten benötigst, wenn nicht, so kannst du innerhalb eines frames z.B. 100 Zeilen aus der Datei einlesen und schonmal berechnen.

wenn dus intelligent machen willst, so sag deinem programm zum beispiel, dass es mit 60fps laufen soll(~17ms pro frame) und wenn es weniger als 17 ms gebraucht hat nutzt du die restliche zeit zum einlesen der datein, solange bis die 17ms erreicht sind, dann merkt der benutzter nichts vom einlesen.
Projekte: Geolaria | aNemy
Webseite: chaosspace.de
 

Sora

BeitragFr, Okt 10, 2008 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
ChaosCoder hat Folgendes geschrieben:
Das kommt natürlich drauf an, ob du sofort alle Daten benötigst, wenn nicht, so kannst du innerhalb eines frames z.B. 100 Zeilen aus der Datei einlesen und schonmal berechnen.

wenn dus intelligent machen willst, so sag deinem programm zum beispiel, dass es mit 60fps laufen soll(~17ms pro frame) und wenn es weniger als 17 ms gebraucht hat nutzt du die restliche zeit zum einlesen der datein, solange bis die 17ms erreicht sind, dann merkt der benutzter nichts vom einlesen.


Hm, so in etwa sah meine "Notlösung" aus, habe gehofft so etwas könnte man eleganter lösen.
Ich werde es mal probieren.

Danke Wink

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group