![]() |
Schubweise Prozessbearbeitung?
Delphi 3 stürtzt ab, und zwar ziemlich genau dann, wenn der angeordnete Rechenaufwand zu groß ist. Gibt es eine Möglichkeit die Prozedur Stück für Stück abzuarbeiten, um das Aufhängen zu verhindern? Oder irgendetwas anderes?
|
Re: Schubweise Prozessbearbeitung?
Zitat:
1. Der Rechenaufwand bleibt insgesamt der gleiche. 2. Ein Prozessor hengt sich nicht auf, nur wenn er Rechenarbeit leisten muss. 3. Was ist ein zu großer Rechenaufwand? Der schlägt sich maximal in längerer Berechnungszeit nieder. Nicht darin, dass sich der Rechner aufhengt. |
Re: Schubweise Prozessbearbeitung?
Wie genau äußert sich das "Aufhängen"? Kein Ram mehr, kein bla, kein blubb... Was passiert?
|
Re: Schubweise Prozessbearbeitung?
Ok, also:
Zum Beispiel das n-Damen Problem: Ab n=16 "reagiert das Projekt1! nicht mehr (nach circa 30 Sekunden ohne Ausgabe der Lösungen). Im Taskmanager muss ich das Programm also seperat abbrechen. Woran es letztlich scheitert, weiß ich gar nicht so genau. Ich wollte in Erfahrung bringen, ob es eine Möglichkeit gibt auch solche umfangreichen Prozesse durchführen zu lassen. Auch minutenlange Berechnung wäre ja prinzipiell gar kein Problem. Eine wirkliche Lösung wird aber ab einem gewissen Rechenaufwand nicht mehr erlangt. Ihr versteht? |
Re: Schubweise Prozessbearbeitung?
Es reagiert nicht mehr weil es in einer Schleife feststeckt (Deadloop). Vielleicht ist n=16 nicht möglich und er probiert endlos rum ohne zu einer Lösung zu kommen.
|
Re: Schubweise Prozessbearbeitung?
Nein, das ist leider nicht die Lösung. Wenn keine Lösungen vorhanden sind, wird dies korrekt angezeigt. Es sollte nur ein Beispiel für das allgemeine Problem sein: Aufwendige Berechnungen führen zuerst zu längerer Berechnungszeit (was ja auch zu erwarten ist), danach aber zum Absturz des Programmes (allerdigns nicht des Betriebssystemes).
Was ist also zu tun? Gibt es auch eine andere Möglichekeit als "mehr Ram" oder "mehr CPU"? |
Re: Schubweise Prozessbearbeitung?
Das Programm stürzt sehr wahrscheinlich garnicht wirklich ab, aber da es so beschäftigt ist kann es dem Betriebssystem nicht mehr antworten, dass ab und an bei all seinen laufenden Programmen eine Testanfrage gibt, und wenn da nichts zurück kommt, dann geht Windows davon aus, dass der Prozess tod ist, und gibt ihn als "reagiert nicht mehr" an, eben weil auf die Anfrage nicht reagiert wurde.
Abhilfe schaffen entweder Threads (die schönere, aber lernintensivere Lösung), oder aber du schmeist in deine Schleife ein "Application.ProcessMessages;" rein. Das veranlasst dein Programm auch während einer längeren Schleife kontinuierlich die Nachrichtenschlange abzuarbeiten - in welcher auch die Anfragen von Windows landen. Delphi stürzt nicht so einfach ab ;). Gruss, Fabian |
Re: Schubweise Prozessbearbeitung?
Vielen Dank - ich habe mich von Windoof irreführen lassen.
Gute Nacht und einen schönen Sonntag. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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