Re: Ende eines multithread-Programms
Verfasst: 22.02.2011 17:37
Wenn der User die Konsole schließt, wird das Programm mit ExitProcess_() beendet. Das kann man nicht verhindern, aber man kann vorher noch etwas Code ausführen:
Code: Alles auswählen
; Wichtig:
; Dieser Callback wird in einem eigenen thread ausgeführt, also
; ist eventuell eine Synchronisation (Mutex etc) nötig um auf globale
; Daten zuzugreifen
Procedure ConsoleHandler(CtrlType.l)
Select CtrlType
Case #CTRL_C_EVENT, #CTRL_BREAK_EVENT
; diese können ignoriert werden, indem man #True zurück gibt
ProcedureReturn #True
Case #CTRL_CLOSE_EVENT
; dieser kann nicht ignoriert werden. Man kann also hier noch etwas code
; ausführen um aufzuräumen, aber das Programm wird auf jeden fall danach
; beendet
Debug "close event"
Case #CTRL_LOGOFF_EVENT, #CTRL_SHUTDOWN_EVENT
; diese werden nur an einen Service gesendet, nicht an ein normales Programm
EndSelect
ProcedureReturn #False
EndProcedure
Procedure console(dummy)
OpenConsole()
SetConsoleCtrlHandler_(@ConsoleHandler(), #True)
Repeat
Input()
Delay(1)
ForEver
EndProcedure
WaitThread(CreateThread(@console(),0))
Delay(50000)
End