Habe ein Programm mit PB 4.20 geschrieben, welches mit WindowedScreen arbeitet und möchte es eigentlich an den Kunden ausliefern. Aber das Teil hängt immer wieder, wenn man längere Zeit keine Eingaben gemacht hat. Der Taskmanager zeigt dann 100% Auslastung an (bzw. 50% bei Dual Core) und ich schieße es dann meist ab. Wenn ich aber 1-2 Minuten warte, läuft es wieder normal weiter.
Als Schuldigen habe ich jetzt FlipBuffers() ausgemacht, welches manchmal endlos lange nicht wieder zurückkehrt und alles blockiert. Was ist da los?
Selbst bei diesem ganz simplen Beispiel-Code passiert es ab und zu. Zum Testen bitte starten und Esc drücken. Dann wird FlipBuffers() aufgerufen und anschließend kommt die Frage, ob das Programm beendet werden soll. "Nein" drücken und das Prog. läuft weiter. Funktioniert soweit einwandfrei. Aber wenn man das Prog. offen lässt und im Vordergrund mit anderen Programmen arbeitet und es dann wieder nach vorne holt und Esc drückt, kommt manchmal minutenlang keine Reaktion. Die letzte Aktion, die das Prog. ausführt, ist "kurz vor FlipBuffers()" in die Zwischenablage zu schreiben und dann bleibt es mit FlipBuffers() hängen. Woran liegt das?
Code: Alles auswählen
InitSprite()
Breite=300 : Hoehe=200
OpenWindow(0,0,0,Breite,Hoehe,"Test",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),0,0,Breite,Hoehe,0,0,0)
AddKeyboardShortcut(0,#PB_Shortcut_Escape,#PB_Shortcut_Escape)
Repeat : Event=WaitWindowEvent()
If Event=#PB_Event_Menu : Taste=EventMenu()
If Taste=#PB_Shortcut_Escape
SetClipboardText("kurz vor FlipBuffers()"+Chr(10)) ;letzte Aktion vor dem Hänger in Zwischenablage protokollieren
FlipBuffers()
SetClipboardText("nach FlipBuffers()"+Chr(10))
If MessageRequester("", "Programm beenden?", #MB_YESNO|#MB_ICONQUESTION|#MB_DEFBUTTON2)=#IDYES
End
EndIf
EndIf
EndIf
Until Event=#PB_Event_CloseWindow