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:
; 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
wenn ich jetzt als aufräumcode ein delay von meinetwegen 10 Tagen mach, dann müsste ja das Hauptprogramm und alle threads erstmal weiterlaufen, wenn ich das richtig versteh.
wenn ich jetzt als aufräumcode ein delay von meinetwegen 10 Tagen mach, dann müsste ja das Hauptprogramm und alle threads erstmal weiterlaufen, wenn ich das richtig versteh.
wäre zwar hässlich, aber wenns zum Ziel führt
Unter Systemsteuerung kann man einstellen, wie lange auf "nicht reagierende Programme" gewartet werden soll und ich denke dieses gehört dazu. Ich glaube der Wert dafür liegt standardmäßig bei ungefähr 20 Sekunden.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
ts-soft hat geschrieben:@DarkDragon
Der Thread endet doch, sobald die Console geschlossen wird, ist auch der Thread zu ende.
Woran das liegt frag ich mich schon seit Jahren. Dafür sollte PureBasic eine art EventConsole() anbieten und nicht einfach den Prozess abschießen lassen. Andere Programme können doch auch Strg + C und das schließen der Konsole (sogar unter Linux - etwa "top") abfangen.
Oh ich seh aber grad, freak hat dafür ja was.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Im Zweifelsfall kann man sich doch, sofern man echt nur die Konsole nicht mag, den Thread weiter laufen lassen mit der Konsole und diese entsprechend über ein Hide verstecken und dann entsprechend wieder anzeigen lassen, wenn man sie doch mal wieder benötigt.
Teilweise sieht mir das ganze aber eh ein bisschen nach fail by concept aus, denn wenn es nur um Konsolen aus und Eingaben geht... das kann man auch ganz schnell selber mit ein paar kleinen Gadgets nachprogrammieren... oder so ne kleine eigene Art von Konsole schreiben, etc...
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher