![]() |
Delphi-Version: 10.4 Sydney
Simples Programm blockiert den ganzen Rechner
Hallo,
eigentlich bin ich auf der Suche nach gang anderen Programmfehlern, deshalb habe ich mein Programm so weit abgespeckt, daß es in einer Schleife am Ende nur noch eine Zahl in den Titelbalken des Fensters schreibt (VCL). Warum zefix wird denn dabei der komplette Rechner blockiert, auch noch nachdem die Schleife durchgelaufen ist? Und das sowohl unter 10.4, 10.2 als auch D2007. BS: Windows 10 akt.
Code:
procedure TForm15.Button1Click(Sender: TObject);
var I:Integer; begin for i := 0 to 1000000 do begin caption:=inttostr(i); end; end; |
AW: Simples Programm blockiert den ganzen Rechner
Was genau meinst Du mit "der ganze Rechner blockiert"? Kann man keine anderen Programme ausführen? Noch nicht einmal den Taskmanager?
Eigentlich sollte dieser Code nur einen Core zu 100% auslasten, das ist bei den meinsten modernen Rechnern kein Problem. |
AW: Simples Programm blockiert den ganzen Rechner
WEIL: Das Updaten der Caption / Titelzeile eines Fensters passiert in der Windows-Messageloop. Und die zeichnet das instant.
Du spammst also das ganze UI-System von Windows mit einer Millionen Messages an Dein eigenes Fenster voll, die alle erstmal einzeln abgearbeitet werden müssen. |
AW: Simples Programm blockiert den ganzen Rechner
Das ist normal ... der DesktopWindowManager hat hier ein kleines Problemchen, wenn er massenhaft Captions am Fenster und womöglich auch in der Startleiste aktualisieren muß.
Ist schon seit über 10 Jahren so und wird sich wohl auch nicht mehr ändern, da Dieses kein "normales" Verhalten ist. |
AW: Simples Programm blockiert den ganzen Rechner
Deshalb aktualisiert man solche Anzeigen normalerweise nur in gewissen Zeitabständen oder alle x Schleifendurchläufe.
|
AW: Simples Programm blockiert den ganzen Rechner
Zitat:
:-D |
AW: Simples Programm blockiert den ganzen Rechner
Dumme Frage:
bei einem label passiert das gleiche? |
AW: Simples Programm blockiert den ganzen Rechner
Zitat:
|
AW: Simples Programm blockiert den ganzen Rechner
Zitat:
Wobei aber fraglich ist ob das Caption sichtbar neu-gezeichnet wird wenn die CPU ausgelastet ist. |
AW: Simples Programm blockiert den ganzen Rechner
Bei einem Label sollte das in der Theorie zumindest so nicht passieren, denn das ist ja kein Windows Control und bekommt deshalb auch zum Setzen des Textes nicht Nachrichten zugeschickt. Sprich es gibt keine solchen Nachwirkungen nach dem Ende der Schleife. Lediglich das Neuzeichnen könnte etwas in der Richtung auslösen, sollte sich aber nicht so stark auswirken.
Den Programmablauf verlangsamen tut es natürlich dennoch enorm, wenn man es zu oft aktualisiert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 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