nachfolgendes Code-Beispiel sollte dazu dienen mir zu demonstrieren wie ich
irgendwelche Ereignisse abfangen kann, ohne das sich das Programm beendet,
sofern ich das im Programmcode selbst nicht auf saubere Weise herbeiführe.
Auf diese Weise möchte ich u.A. sicherstellen das ich nicht irgendwann einmal
z.B. während eines Übertragunsprozesses oder Schreib/Lese-Prozesses dann ein
unwillkommener Programmabbruch eintritt, welcher durch den Benutzer gerbeigeführt wurde.
Sei es nun durch CTRL+C oder durch das klicken eines [ X ] auf das Consolen-Fenster.
Zum anderen habe ich dann hiermit immer eine maximale Programm-Kontrolle.
Leider funktioniert das nicht so ganz, da sich das Programm trotz das ich das Event
#CTRL_CLOSE_EVENT abgefangen habe, trotzdem beendet und das mit einer Fehlermeldung
des Debuggers "Das mit dem Debugger getestete Executeable endete unerwartet"
was ja mal gar nicht angehen darf, da ich in einer Endlosschleife bin.
Nur wieso ist das so, und wieso wird mein Event nicht wie erwartet behandelt,
sprich, wieso wird mein Programm unerwartet beendet obwohl ich doch alle Events
abgefangen habe, um individuell darauf einzugehen, bevor ich das Ende des
Programms selbt herbeiführe, sofern ich das will?
Code: Alles auswählen
Procedure ControlHandler(fdwCtrlType)
Beep_(5000,80)
Beep_(880,80)
Beep_(2000,80)
Select fdwCtrlType
Case #CTRL_C_EVENT
Debug "ctrl-c"
;ProcedureReturn #True
Case #CTRL_CLOSE_EVENT
; hier Programm 2 schliessen
Debug "close"
CloseConsole()
;ProcedureReturn #True
Case #CTRL_BREAK_EVENT
Debug "break"
;ProcedureReturn #True
Default
Debug "Unbehandelter CTRL-TYPE:"+Str(fdwCtrlType)
;ProcedureReturn #True
EndSelect
ProcedureReturn #True
EndProcedure
OpenConsole()
ConsoleColor(0,15)
ConsoleLocate(10,12)
PrintN("this is a test")
SetConsoleCtrlHandler_(@ControlHandler(), #True)
Repeat
Delay(1)
ForEver