Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Prog friert scheinbar mit "Keine Rückmeldung" ein (https://www.delphipraxis.net/203353-prog-friert-scheinbar-mit-keine-rueckmeldung-ein.html)

ManniSt 10. Feb 2020 19:45

Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Mein Prog zur Zahlenverarbeitung friert scheinbar mit der Meldung "Keine Rückmeldung" ein.
Die Progressbar bleibt stehen. Der Taskmanager zeigt noch immer eine stabile und aktive Prozessorlast an. Ich weis aber dann nicht mehr, wieweit das Teil schon ist.

Das Ganze läuft super durch, solange das Fenster, z.B. zum Verschieben, nicht angepackt wird. In diesem Fall friert die Anzeige sofort ein.

Hat da jemand eine Lösungsidee???

for I := MVon to MBis do
begin
if IstErgebnis(I) = true then writeln(Datei,I);
if (GetTickCount - Tick4) > 250 then // Alle 250ms ProgressBar.Update
begin
Tick4 := GetTickCount;
ProgressBar.Position := I;
ProgressBar.Update;
end; // if (GetTickCount - Tick4) > 250 then
end; // for I := MVon to MBis do
ProgressBar.Position := Max;

hoika 10. Feb 2020 20:00

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Hallo,

Delphi-Quellcode:
ProgressBar.Update;

Application.ProcessMessages;

jfheins 10. Feb 2020 20:01

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Wenn die Berechnung länger dauert, solltest du das idealerweise in einen Thread auslagern.

Dann hat dein Programm 2 Threads: Einer für das Formular und relativ unabhängig davon einer der rechnet. Die Forschrittsmeldungen in die UI sind dann aber etwas komplexer.

Falls sich deine Berechnung parallelisieren lässt, kannst du sie auch auf 2-3 Threads aufteilen und so beschleunigen. (Threads können vom Betriebsystem auf mehrere Kerne der CPU verteilt werden)

DeddyH 10. Feb 2020 20:02

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Die Holzhammer-Methode: innerhalb der Schleife Application.ProcessMessages aufrufen. Die elegantere und solidere Lösung: die Schleife in einen Thread auslagern und bei Bedarf synchronisiert auf die Oberfläche zugreifen. Beispielcode sollte sich reichlich im Forum finden lassen.

ManniSt 10. Feb 2020 20:09

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Application.ProcessMessages;

ist die Lösung!

DANKE!!!

Muss mich mal mit Threads beschäftigen, habe ich beisher nicht getan.

Manni

jfheins 10. Feb 2020 20:11

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Zitat:

Zitat von DeddyH (Beitrag 1457090)
Die Holzhammer-Methode: innerhalb der Schleife Application.ProcessMessages aufrufen. Die elegantere und solidere Lösung: die Schleife in einen Thread auslagern und bei Bedarf synchronisiert auf die Oberfläche zugreifen. Beispielcode sollte sich reichlich im Forum finden lassen.

Ich bin mal so nett, weil ich Application.ProcessMessages wirklich nicht mag ;-)

So in der Richtung müsste das aussehen:
Delphi-Quellcode:


type
  TMyThread: class (TThread)
    Progress: Integer;

    procedure Execute; override;
    procedure VCL_Result;
  end;


procedure TMyThread.Execute;
var
   T: Integer;
begin
   Progress := 0;
   synchronize (VCL_Result);
   T = GetTickCount();

   // Der Threadcode
   for ....
      if Integer(GetTickCount() - T) > 250 then begin
         T := GetTickCount();
         synchronize (VCL_Result);
      end;
      
      // Rechnen
   end;

   Progress := 100;
   synchronize (VCL_Result);
end;

procedure VCL_Result
begin
   Form1.ProgressBar.Position := Progress;
end;

ManniSt 10. Feb 2020 20:39

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Danke dafür, muss ich mich mal demnächst damit beschäftigen. Habe noch 1-3 Projekte abzuschließen aber dann ...

Manni

DieDolly 10. Feb 2020 20:42

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Zitat:

Application.ProcessMessages;

ist die Lösung!

DANKE!!!
Ob das jetzt die Lösung ist, sei dahingestellt. Ich habe immer gelernt, man sollte ProcessMessages niemals nutzen.

ManniSt 10. Feb 2020 20:43

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Schon gut, bis auf weiteres ist das die Lösung.

DieDolly 10. Feb 2020 20:47

AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
 
Wenn du dein Programm so aufbaust, dass du immer nur die erst-beste "Lösung" nimmst, wirst du irgendwann deinen Code in die Tonne kloppen können und dich fragen, was du damals fdür einen Mist geschrieben hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 Uhr.
Seite 1 von 2  1 2      

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