AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Code, der das Programm einfrieren lässt
Thema durchsuchen
Ansicht
Themen-Optionen

Code, der das Programm einfrieren lässt

Ein Thema von Alallart · begonnen am 12. Sep 2023 · letzter Beitrag vom 15. Sep 2023
Antwort Antwort
Seite 1 von 2  1 2      
Alallart

Registriert seit: 8. Dez 2015
155 Beiträge
 
#1

Code, der das Programm einfrieren lässt

  Alt 12. Sep 2023, 15:14
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?
  Mit Zitat antworten Zitat
Benutzerbild von MEissing
MEissing

Registriert seit: 19. Jan 2005
Ort: Egelsbach
1.384 Beiträge
 
Delphi 12 Athens
 
#2

AW: Code, der das Programm einfrieren lässt

  Alt 12. Sep 2023, 15:21
repeat until false;
Matthias Eißing
cu://Matthias.Eißing.de [Embarcadero]
Kein Support per PN
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#3

AW: Code, der das Programm einfrieren lässt

  Alt 12. Sep 2023, 15:23
repeat until true = false; while true do; repeat until 47 = 11; i := 0; repeat until i = 42; Eigentlich jede Schleife, deren Endebedingung nie erfüllt werden wird.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#4

AW: Code, der das Programm einfrieren lässt

  Alt 12. Sep 2023, 16:20
Sleep(MaxInt); Dauert gut 3 Wochen bis das zurückkommt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
680 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 08:08
repeat until false;
repeat until true = false; while true do; repeat until 47 = 11; i := 0; repeat until i = 42; Eigentlich jede Schleife, deren Endebedingung nie erfüllt werden wird.

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.
Sleep(MaxInt); Dauert gut 3 Wochen bis das zurückkommt.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Kas Ob.

Registriert seit: 3. Sep 2023
351 Beiträge
 
#6

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 08:34
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.
Kas
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 08:59
Bei Interesse hier noch etwas Lesestoff was Windows dazu bringt, ein Programm als "(reagiert nicht)" zu behandeln:

https://learn.microsoft.com/en-us/wi...s-applications
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.605 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 08:59
Oder der Klassiker:

Delphi-Quellcode:
const
  HELL_FREEZES_OVER = False;

repeat
until HELL_FREEZES_OVER;
Thomas Mueller
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#9

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 09:43
repeat until false;
repeat until true = false; while true do; repeat until 47 = 11; i := 0; repeat until i = 42; Eigentlich jede Schleife, deren Endebedingung nie erfüllt werden wird.

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.
Sleep(MaxInt); Dauert gut 3 Wochen bis das zurückkommt.
Prinzipiel hast Du ja recht. Es war halt nach dem "Programmhänger" gefragt und nicht nach einem Strom- und / oder resourcesparenden "Programmhänger".

Wir können aber gerne die Lösungsvorschläge kombinieren, dann wird der "Programmhänger" auch strom- und resourcensparend:

repeat Sleep(MaxInt); until false;
repeat Sleep(MaxInt); until true = false;
while true do Sleep(MaxInt);
repeat Sleep(MaxInt); until 47 = 11;
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#10

AW: Code, der das Programm einfrieren lässt

  Alt 13. Sep 2023, 10:24
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 while True do begin Sleep(15 {bis 30} * MSecsPerSec); Application.ProcessMessages; end; , 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.
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)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (13. Sep 2023 um 10:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz