![]() |
Code, der das Programm einfrieren lässt
Ich suche ein Stück Code, mit dem ich mein Programm dazu bringen kann auf nichts zu reagieren, so dass er über den Taskmanager beendet werden muss. Mir fällt leider nichts gutes ein.
Grund für den Code ist, dass ich gelegentlich PC Kurse gebe, bzw. Umgang mit Windows. Dazu gehört es ein Programm mit dem Taskmanager zu schließen. In der Regel sage ich: "stellen Sie sich vor, das Programm reagiert nicht." Besser wäre es ihnen ein Programm geben, das tatsächlich nicht mehr reagiert, und wo im Tasmanager auch die Meldung "Programm reagiert nicht" steht. Und damit habe ich ein Problem. Was ich nicht will ist, dass Windows oder andere Programme beeinträchtigt werden. Nur das eine Programm soll auf nichts mehr reagieren, außer den Taskmanager. Fällt einem was ein? |
AW: Code, der das Programm einfrieren lässt
repeat until false;
|
AW: Code, der das Programm einfrieren lässt
Delphi-Quellcode:
repeat until true = false;
Delphi-Quellcode:
while true do;
Delphi-Quellcode:
repeat until 47 = 11;
Delphi-Quellcode:
Eigentlich jede Schleife, deren Endebedingung nie erfüllt werden wird.
i := 0; repeat until i = 42;
|
AW: Code, der das Programm einfrieren lässt
Delphi-Quellcode:
Dauert gut 3 Wochen bis das zurückkommt.
Sleep(MaxInt);
|
AW: Code, der das Programm einfrieren lässt
Zitat:
Zitat:
Früher hat man diese Methode gerne mal verwendet um zu Heizen. Seit Strom aber so teuer ist dass die Leute wieder Schweinespeck in Tranlampen übergehen, kann ich nur zu Uwe's Lösung raten. Zitat:
|
AW: Code, der das Programm einfrieren lässt
Use timer (or don't) and wait on Named Event, trigger the state by another process to make the waiting process simulate a freeze (hanging/not responding) and get out of it (resume normally), just make sure you that main thread is the one waiting on the event.
|
AW: Code, der das Programm einfrieren lässt
Bei Interesse hier noch etwas Lesestoff was Windows dazu bringt, ein Programm als "(reagiert nicht)" zu behandeln:
![]() |
AW: Code, der das Programm einfrieren lässt
Oder der Klassiker:
Delphi-Quellcode:
const
HELL_FREEZES_OVER = False; repeat until HELL_FREEZES_OVER; |
AW: Code, der das Programm einfrieren lässt
Zitat:
Wir können aber gerne die Lösungsvorschläge kombinieren, dann wird der "Programmhänger" auch strom- und resourcensparend:
Delphi-Quellcode:
repeat Sleep(MaxInt); until false;
Delphi-Quellcode:
repeat Sleep(MaxInt); until true = false;
Delphi-Quellcode:
while true do Sleep(MaxInt);
Delphi-Quellcode:
repeat Sleep(MaxInt); until 47 = 11;
Delphi-Quellcode:
i := 0; repeat Sleep(MaxInt); until i = 42;
Die Einschränkung der Laufzeit auf lediglich etwa drei Wochen, aus Uwes Vorschlag, wird dadurch auch aufgehoben. ;-) Es handelt sich also um durchaus unterschiedliche Lösungen des Problems ;-) |
AW: Code, der das Programm einfrieren lässt
Kommt auch drauf an, was man will.
Schleifen ohne Sleep halten an und lasten CPU einen Kern hoffentlich voll aus. Mit einem Sleep oder WaitFor würde auch angehalten, aber der Thread/Kern arbeitet mit 0%. Standardmäßig steht das HungApp-Timeout bei 3 Sekunden. Also nach einem Hängen von 3 Sekuunden, würde Windows das Fenster als "reagiert nicht" markieren. Allerdings nicht sofort, aber wenn man z.B. die Maus drüber hinweg bewegt, dann wird es ganz schnell registriert. PS: In Wirklichkeint ersetzt/erweitert Windows nicht die Form-Caption, sondern macht einen Screenshot vom Fenster, blendet das Fenster aus und stellt ein Ersatzfenster dar, mit den Scrrenshot als Hintergrund und der neuen Caption (darum zuckt das auch so "brutal", wenn das Fenster wieder reagiert und wieder ausgetauscht / neu aufgebaut wird) Also, ein
Delphi-Quellcode:
, bzw. ein Timer mit Interval=1 und darin das Sleep, würde bereits ein schönes Hängen simulieren, wo es aber nicht permanent hängt.
while True do begin Sleep(15 {bis 30} * MSecsPerSec); Application.ProcessMessages; end;
OK, die Pause vielleicht doch besser anpassen, falls jemand das Setting geändert hat (HKEY_CURRENT_USER\Control Panel\Desktop : HungAppTimeout) PS: Was auch nett ist, wäre vielleicht ein Stackoverflow, oder Ähnliches, wobei das Programm ohne Rückmeldung verreckt und wortlos verschwindet, damit man es in der Ereignisanzeige nach dem Fehler suchen darf. (ein Eintrag unterm Programmnamen, aber vor allem der Eintrag vom WER / Windows Error Reporting) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz