Fenster hängt sich auf

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Fenster hängt sich auf

Beitrag 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
Dark
Beiträge: 93
Registriert: 24.08.2007 20:36
Kontaktdaten:

Re: Fenster hängt sich auf

Beitrag 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
Benutzeravatar
DrNo
Beiträge: 202
Registriert: 09.05.2008 15:20
Wohnort: BW, Deutschland
Kontaktdaten:

Re: Fenster hängt sich auf

Beitrag 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?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Fenster hängt sich auf

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten