"Aufhängen" verhindern beim Einlesen
Übersicht

SoraBetreff: "Aufhängen" verhindern beim Einlesen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group