Wäre vom Programmablauf (des Beispielcodes) auch nicht logisch. Denn wenn sich da Events aufgestaut hätten, würden die in der Repeat-Schleife blitzschnell abgearbeitet, egal ob WaitWindowEvent() oder WaitWindowEvent(10).
Dass der Esc-Tastendruck noch korrekt erkannt wird, sieht man eindeutig daran, dass danach in der Zwischenablage "kurz vor FlipBuffers()" steht (Bitte mal in einem Editor Strg-C drücken). Wenn Esc nicht erkannt würde, weil andere Event vorher blockieren, müßte in der Zwischenablage "nach FlipBuffers()" stehen, weil das beim vorletzten Esc-Druck (als das Prog. noch nicht hing) dort als letztes reingeschrieben wurde.
Der Hänger liegt definitiv bei FlipBuffers(), weil der WindowedScreen() nicht mehr reagiert.
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(10)
If Event=#PB_Event_Menu : Taste=EventMenu()
If Taste=#PB_Shortcut_Escape
SetClipboardText("kurz vor FlipBuffers()"+Chr(10)) ;letzte Aktion vor dem Hänger
FlipBuffers() ;<================ hier hängt es
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
End