Seite 1 von 1

Fenster hängt sich auf

Verfasst: 31.08.2010 19:55
von DrNo
Hallo,
Das lineare Programm hier soll nur löschen, klappt auch prima. Der Fortschritt wird mithilfe des Progressbar angezeigt. Jedoch ist es so, dass sich das Fenster, sobald man etwas anderes macht wie z.B. das Startmenü, einen Ordner oder Programm öffnen (=Programm wird in den Hintergrund verschoben) oder einfach verschiebt, aufhängt. Das bleibt dann so, bis das Programm fertig ist und schließt sich dann. Lässt sich das verhindern?

Code: Alles auswählen

Procedure OpenProgressWindow()
  If OpenWindow(0, 428, 271, 526, 61, "Fortschritt",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
     TextGadget(0, 10, 10, 510, 20, "Lösche Datei...")
     ProgressBarGadget(1, 10, 30, 510, 20, 0, 10)
  EndIf
EndProcedure
Datei$ = OpenFileRequester("", "C:\", "Alle Dateien (*.*)", 0, 0)
Datei2$ = GetPathPart(Datei$)+Str(Random($FFFF))
RenameFile(Datei$, Datei2$)
OpenProgressWindow()
If OpenFile(0, Datei2$)
 laenge.d = FileSize(Datei2$)
 SetGadgetAttribute(1, #PB_ProgressBar_Maximum, laenge)
 For c=0 To laenge Step 1
  WriteWord(0, Random($FFFF)) 
  FlushFileBuffers(0)
  SetGadgetState(1, c)
 Next
 CloseFile(0)
 DeleteFile(Datei2$) 
 Else
  MessageRequester("Fehler", "Während dem Löschvorgang ist ein Fehler aufgetreten.")
EndIf
  
; IDE Options = PureBasic 4.41 (Windows - x86)
; CursorPosition = 8
; Folding = +
; EnableXP
; Executable = ..\Desktop\CShred.exe

Re: Fenster hängt sich auf

Verfasst: 31.08.2010 20:15
von Dark
Hallo,

dein Problem entsteht dadurch, das du die Ereignisse wie Fenster verschieben, Fenster neuzeichnen etc. nicht verarbeitest. Du musst ab und an mal WindowEvent() aurufen, damit diese verarbeitet werden können. Deine For Schleife wäre zum Beispiel eine mögliche Position dafür.

mfg,
Dark

Re: Fenster hängt sich auf

Verfasst: 31.08.2010 20:41
von DrNo
Danke für den Tipp, werde ich gleich umsetzen.

Bei größeren Dateien dauert es doch recht lang. Gibt es eine Möglichkeit den ganzen Vorgang etwas zu beschleunigen? Ist z.b. FlushFileBuffers() nur am Ende der kompletten Schreiboperation notwendig oder nach jedem For-Durchgang?

Re: Fenster hängt sich auf

Verfasst: 31.08.2010 21:05
von ts-soft
Falls Du Dir erhoffst, so werden die Dateien sicher von der Festplatte gelöscht,
bist Du im Irrtum. Deine Logik in Ehren, aber das Dateisystem ist nicht so logisch :mrgreen:

Flashbuffer macht auch nichts schneller und ein Fenster ohne Eventloop wird immer tod sein.

Versuchs doch erstmal mit ner Console, von Windows-Programmierung scheinst Du noch weit
entfernt zu sein.

Gruß
Thomas