AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi komplexe Berechnungen -> Programm hängt
Thema durchsuchen
Ansicht
Themen-Optionen

komplexe Berechnungen -> Programm hängt

Ein Thema von LL0rd · begonnen am 9. Sep 2006 · letzter Beitrag vom 9. Sep 2006
Antwort Antwort
LL0rd

Registriert seit: 16. Aug 2006
4 Beiträge
 
#1

komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 11:54
Hallo,

ich habe ein Programm, dass einige komplexe Rechnungen durchführt. Funktionen werden Rekursiv aufgerufen und einige MySQL Abfragen durchgeführt. Das Programm funktioniert bei mir ohne Probleme, aber z.B. bei einem Freund, der einen langsameren Rechner und eine langsame Internetverbindung hat, braucht das Programm für die Berechnung oft bis zu 1-1:30 min. In dieser Zeit kommt es vor, als ob das Programm komplett hängen würde. Nach einer Weile verschwindet sogar die Menü Bar oben.

Habt ihr einen Tip für mich, wie man so eine Situation umgehen kann (vor allem ohne an Performance zu verlieren)?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 12:19
Du könntest in den Berechnungsschleifen
Application.ProcessMessages aufrufen.

Dadurch werden Messages die an Dein Programm geschickt wurden abgearbeitet.
Nachteil es bremst Deine Schleifen etwas - daher
Application.ProcessMessages nicht in jedem Durchlauf aufrufen.

Um den Leuten hier eine etwas genauere Analyse zu ermöglichen
wäre etwas relavanter SoruceCode notwendig.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
LL0rd

Registriert seit: 16. Aug 2006
4 Beiträge
 
#3

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 12:32
Danke für die Antwort. Einen Teil des Codes zu veröffentlichen würde eigentlich nichts bringen, da es eher ein allgemeines Problem ist. Es handelt sich gerade um eine größere Matrix die berechnet wird. Ergebnisse landen in einer MySQL Datenbank.

Ich kann mir sehr gut vorstellen, dass der Aufruf von Application.ProcessMessages an performance kostet. Angenommen ich bau ein Timer ein, der alle 500ms Application.ProcessMessages aufruft, wird der Timer trotz der laufenden Berechnung dann gestartet?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 12:45
Nein, da dein Programm während der Berechnung die Nachrichtenschleife nicht ausführen kann. Besser wäre hier wohl ein Thread.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 12:46
Zitat:
Ich kann mir sehr gut vorstellen, dass der Aufruf von Application.ProcessMessages an performance kostet. Angenommen ich bau ein Timer ein, der alle 500ms Application.ProcessMessages aufruft, wird der Timer trotz der laufenden Berechnung dann gestartet?
Das ist eine gute Frage auf die ich keine Antwort weiß.

Ich würde es mit einer Laufvariablen versuchen.
Die wird bei jedem Schleifendurchgang erhöht

In etwa so:
Delphi-Quellcode:
if (i mod 50) = 0 then
  begin
    i:=1;
    application.processMessages;
  end
else
  inc(i);
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 12:46
Zitat von LL0rd:
Ich kann mir sehr gut vorstellen, dass der Aufruf von Application.ProcessMessages an performance kostet. Angenommen ich bau ein Timer ein, der alle 500ms Application.ProcessMessages aufruft, wird der Timer trotz der laufenden Berechnung dann gestartet?
HI,
du stellst genau die richtige Frage. Es würde nicht gut gehen, ein Timer wird mit sehr geringer Priorität betrieben und es wird nicht sichergestellt, dass dieser auch irgendwann mal aufgerufen wird. In der Tat kommt es hier bei hoher Last gerne mal zu Aussetzern. Zudem würde dein Formular dann alle 500ms springen (wenn es bewegt wurde).
Besser ist es, wenn du deine Berechnung in einen Thread auslagerst. Solange du nur einen Thread laufen hast, kann dieser sequentiell laufen. Der Vorteil ist, dass dein Thread immer solange rechnet bis das Form bewegt wird. Die Bewegung würde sofort gezeichnet werden und danach wieder der Thread die volle Rechenzeit bekommen. Möchtest du hier auf VCL-Komponenten zugreifen, musst du allerdings aufpassen, da muss der Zugriff synchronisiert werden (findest ein Tutorial zu Threads in der DP).
Der Vorteil hier ist halt, dass du keine unnötigen Application.Processmessages Aufrufe hast. Natürlich hat auch ein Thread seinen overhead, aber ich denke der Vorteil liegt halt im gezielteren Unterbrechen.

Gruß Der Unwissende

[Add]
Ok, der Luckie war wohl schneller!
Ok, der Klaus auch
[/ADD]
  Mit Zitat antworten Zitat
LL0rd

Registriert seit: 16. Aug 2006
4 Beiträge
 
#7

Re: komplexe Berechnungen -> Programm hängt

  Alt 9. Sep 2006, 13:10
Danke für die Antworten!

Ich habe leider die letzten 1,5 Jahre mit FPGAs und VHDL gearbeitet.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:05 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