AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Programm soll erkennen, ob es noch reagiert

Programm soll erkennen, ob es noch reagiert

Offene Frage von "Chrissi91"
Ein Thema von Chrissi91 · begonnen am 26. Mai 2008 · letzter Beitrag vom 26. Mai 2008
Antwort Antwort
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#1

Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 06:16
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?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 06:23
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?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Chrissi91

Registriert seit: 28. Jul 2005
849 Beiträge
 
#3

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 06:26
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 06:32
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]
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 06:32
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)
Online

Registriert seit: 25. Jun 2002
Ort: Hausach
7.606 Beiträge
 
#6

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 07:32
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Programm soll erkennen, ob es noch reagiert

  Alt 26. Mai 2008, 09:02
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
Oliver
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 16:56 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