AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Hilfe application.ProcessMessages bei Win 10
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe application.ProcessMessages bei Win 10

Ein Thema von achi 3.0 · begonnen am 22. Jan 2018 · letzter Beitrag vom 22. Jan 2018
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Luckie
Luckie

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

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 09:07
Warum das nachbauen was Application.ProcessMessages selbst schon macht, nämlich die anstehenden Nachrichten abarbeiten?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#2

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 09:20
Dann lösch meinen Beitrag einen Hilfesuchenden zu Helfen. Geht schneller als Nachzufragen und man vom Thema abkommt.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#3

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 09:45
Zitat:
versuche ein Sleep(20); in deine repeat schleife zu setzten damit die cpu nicht auf 100% läuft.
Hier im Forum suchenDelay http://www.delphipraxis.net/6620-delay.html

Aber es macht auch keinen Sinn, den einmaligen Durchlauf noch künstlich mit einem Sleep/Delay zu verlängern.
Wenn wirklich viel zu tun ist, dann darf das Programm gern mal mit 100% laufen.

Aber wie die Messages behandelt werden ist letztendlich egal, wenn die Position wohl eher das Problem ist.
Zitat:
Im OnShow ist das ungünstig plaziert.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Jan 2018 um 09:47 Uhr)
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#4

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 10:07
Aber er wollte doch ein Einfrieren verhindern, weswegen ich Sleep() vorschlug. (nicht auf 100%)
Ja kann sein das es Delay() bei ihm heißen mag.
Da ich fast alle funktionen selbst bereitstelle kenn ich mich nicht zu 100% aus was wo tatsächlich existiert.

procedure Sleep(dwMilliseconds: DWORD); stdcall;
procedure Sleep; external kernel32 name 'Sleep';

Da hol ich mir mein Sleep() her, Delphi unabhängig. Ruft Delphi Version XYZ das gleiche auf? Ich weiß es nicht.
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.749 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 10:17
Das hängt doch alles davon ab, was das "tue irgendwas" im ersten Post eigentlich ist. Da wäre Input vom OP hilfreich.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#6

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 10:24
Aber er wollte doch ein Einfrieren verhindern, weswegen ich Sleep() vorschlug. (nicht auf 100%)
Aber Sleep ist doch grade ein Befehl, mit dem Man das Programm absichtlich "einfriert.

Delay ist eine "eigene" Implementation, die Delphi nicht kennt.
Es verbindet Sleep mit einem Application.ProgressMessages, bzw. PeekMessage+DispatchMessage, damit der Code wartet, aber währenddessen dennoch Messages verarbeitet werden können.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#7

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 11:03
himitsu verstehe mich bitte nicht falsch.

repeat
processmessages;
until irgendwas:

egibt das das formular einfriert, richtig?

repeat
sleep(20);
processmessages;
until irgendwas:

egibt das das formular noch reagieren kann, zum beispiel ein "Abbruch" Knopf betätigen, richtig?

ich schau mir mal dein delay link an.

grüße
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#8

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 11:13
Zitat:
repeat
processmessages;
until irgendwas:

egibt das das formular einfriert, richtig?
also das friert nie ein.

Delphi-Quellcode:
procedure WinProcessMessages;
var
  ProcMsg: TMsg;
begin
  while PeekMessage(ProcMsg, 0, 0, 0, PM_REMOVE) do
  begin
    if (ProcMsg.message = WM_QUIT) then
      Exit;
    TranslateMessage(ProcMsg);
    DispatchMessage(ProcMsg);
  end;
end;
Delphi-Quellcode:
repeat
WinProcessMessages;
until irgendwas;
sollte mich auch wundern..
Mit Sleep bremst du die anderen Messagen nur aus.
Warum das bei W10 Probleme machen kann? Keine Ahnung.

Zitat:
Im OnShow ist das ungünstig plaziert.
Dito und das wird auch sein Problem sein.

gruss

Geändert von EWeiss (22. Jan 2018 um 11:19 Uhr)
  Mit Zitat antworten Zitat
achi 3.0

Registriert seit: 7. Nov 2008
Ort: Köln
32 Beiträge
 
Delphi 5 Professional
 
#9

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 11:52
Danke für die ganzen Antworten. Hatte auch schon mal gelesen, das application.ProcessMessages irgendwie böse ist aber selbst damit nie ein Problem gehabt bis zu einem Update von Windows 10. Ab jetzt sind aber alle Windows 10 Versionen betroffen außer ich installiere Windwos 10 von einer alten CD.

Das mit der repeat schleife habe ich nun mit einem Timer gelöst, was mir jedoch nicht erklärt was Windows nun anders macht.
Einzig mit eine Sache bekomme ich nicht hin. Wenn ich eine Datei mittels IdHTTP1 übertrage will ich während der procedure TForm2.IdHTTP1Work eine Progressbar laufen lassen. Diese wird aber nicht angezeigt ohne application.ProcessMessages. Habt Ihr eine Idee wie ich es hinbekomme das die Progressbar während der procedure weiter aktuallisiert wird.



ProgressBar1.max := AWorkCountMax;

procedure TForm2.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar1.position := AWorkCount;

end;
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.535 Beiträge
 
Delphi 12 Athens
 
#10

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 12:37
egibt das das formular einfriert, richtig?
Das nicht, aber das Sleep friert immer wieder kurz alles ein und sorgt auch dafür, dass "tu was" länger braucht.

Eine reine Warteschleife, die nur Messages verarbeitet, die garf gern kurz einfrieren, wenn gerade keine Messages vorhanden sind.
Gerade das wurde in dem Delay von Hagen optimiert, also statt einen Sleep wird dort mit WaitFor auf den Timeout gewartet oder bis eine Message ansteht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Jan 2018 um 12:39 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 01: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-2025 by Thomas Breitkreuz