![]() |
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; |
AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
Hallo,
Delphi-Quellcode:
ProgressBar.Update;
Application.ProcessMessages; |
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) |
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.
|
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 |
AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
Zitat:
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; |
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 |
AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
Zitat:
|
AW: Prog friert scheinbar mit "Keine Rückmeldung" ein
Schon gut, bis auf weiteres ist das die Lösung.
|
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 10:54 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 by Thomas Breitkreuz