Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Programm soll erkennen, ob es noch reagiert (https://www.delphipraxis.net/114466-programm-soll-erkennen-ob-es-noch-reagiert.html)

Chrissi91 26. Mai 2008 06:16


Programm soll erkennen, ob es noch reagiert
 
Hallo,

ich habe ein doch sehr rechenintensives Programm geschrieben, was eigentlich immer läuft, wenn ich nicht am PC bin. Jetzt kann ich bei dem Programm variieren wie viele Dinge es "gleichzeitig" (sprich in einem Timerdurchlauf) machen soll. Alle 20 Vorgänge sind gleich und beanspruchen den PC auch gleichermaßen.

Wenn ich den mit 1 Vorgang pro Minute stundenlang laufen lasse, geht alles gut, aber schon bei 15 Vorgängen gleichzeitig schmiert irgendwann das Programm ab. Jetzt fände ich es ganz hübsch, wenn ich das Programm entschieden lassen könnte, wieviele Vorgänge es gleichzeitig macht, sodass er sehr effizient arbeitet, aber nie abstürzt.

Wie könnte man das realisieren? CPU abfragen muss nicht unbedingt entscheidend sein, denn der kann auch bei 98 % stehen ohne abzuschmieren.

Hat vielleicht jemand meinen Text jetzt verstanden, was ich umsetzen möchte, und hat vielleicht noch jemand eine Idee? :mrgreen:

Bernhard Geyer 26. Mai 2008 06:23

Re: Programm soll erkennen, ob es noch reagiert
 
Zitat:

Zitat von Chrissi91
Wenn ich den mit 1 Vorgang pro Minute stundenlang laufen lasse, geht alles gut, aber schon bei 15 Vorgängen gleichzeitig schmiert irgendwann das Programm ab. Jetzt fände ich es ganz hübsch, wenn ich das Programm entschieden lassen könnte, wieviele Vorgänge es gleichzeitig macht, sodass er sehr effizient arbeitet, aber nie abstürzt.

Wie wäre es die noch vorhandenen Fehler im Programm zu beheben :-) Und vorallem mit was für einen Fehler stürzt er ab? Schon mal probiert das Programm aus der IDE zu starten und so lange laufen zu lassen?

Chrissi91 26. Mai 2008 06:26

Re: Programm soll erkennen, ob es noch reagiert
 
Naja ... es kommt keine Fehlermeldung. Wenn ich das Programm 2 Stunden laufen lasse bei voller Auslastung und ich irgendwann mal ins Fenster klicken will, sagt Windows, dass das Programm nicht mehr reagiert ...

Bernhard Geyer 26. Mai 2008 06:32

Re: Programm soll erkennen, ob es noch reagiert
 
Zitat:

Zitat von Chrissi91
Naja ... es kommt keine Fehlermeldung. Wenn ich das Programm 2 Stunden laufen lasse bei voller Auslastung und ich irgendwann mal ins Fenster klicken will, sagt Windows, dass das Programm nicht mehr reagiert ...

Da fehlt wohl ein Application.Processmessage aufruf in deiner Worker-Funktion. Oder die Verlagerung dieser in einen Thread.

[Edit]- Application.Process -> Application.Processmessage[/Edit]

alzaimar 26. Mai 2008 06:32

Re: Programm soll erkennen, ob es noch reagiert
 
Das ist dann kein Programmabsturz, sondern besagt nur, das dein Programm in einer Schleife steckt bzw. gerade keine Windows-Nachrichten (Messages) abarbeitet. Das macht es z.B., wenn es 'nix' macht (in Wirklichkeit wartet es auf Windows-Botschaften). Du musst deine Berechnungsschleifen so ändern, das ab und an 'Application.ProcessMessages' aufgerufen wird.

Phoenix 26. Mai 2008 07:32

Re: Programm soll erkennen, ob es noch reagiert
 
Wenn Deine Anwendung nicht mehr 'reagiert', dann kann es logischerweise auch nicht mehr darauf reagieren, dass es nicht reagiert.

Einzige Möglichkeit wenn es denn soweit ist, ist die "Application Recovery API". Die steht Dir leider erst ab Vista zur Verfügung, XP bietet sowas nicht.

Sherlock 26. Mai 2008 09:02

Re: Programm soll erkennen, ob es noch reagiert
 
Sowas löst man über einen sogenannten Watchdog. Das ist ein zweites Programm, das mit dem eigentlichen Programm kommuniziert, und bei Ausbleiben von Antworten meldet, daß es tot ist. Ob man das allerdings zur Auslastungsoptimierung verwenden halte ich für eher unsinnig. Wie andere schon angemerkt haben, müsstest Du (auch für eine Watchdog-Lösung) mal ein paar Application.ProcessMessages an strategischen Stellen einstreuen. Dann sollte auch Windows nicht mehr der Meinung sein, Deine Application wäre abgestürzt.

Ansonsten ist es imho eines der liebsten Probleme der Informatik, ein Programm zu schreiben, das erkennt ob ein anderes (oder es selbst), fehlerhaft ist ;)

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:35 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