![]() |
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: |
Re: Programm soll erkennen, ob es noch reagiert
Zitat:
|
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 ...
|
Re: Programm soll erkennen, ob es noch reagiert
Zitat:
[Edit]- Application.Process -> Application.Processmessage[/Edit] |
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.
|
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. |
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 03:11 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