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

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   
achi 3.0

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

Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 07:59
Hallo allerseits,

ich hatte schon vor einiger Zeit einen Thread erstellt wo es um das einfrieren eines Programms bei Windows 10 ging. Leider konnte mir nicht geholfen werden. Ich habe aber weiter dinge ausprobiert und bin nun auf das Problem gekommen. Nur weiß ich nicht was hier bei Windows 10 anders gemacht wird.

Ich muss jedoch erwähnen, das es erst mit einem Update zu diesem Problem kam und ab nun jede Version das selbe aufweist.
Wenn ich bei Windows 10 einfach eine Form erstelle wo mittels Button1 die Form2 aufgerufen wird und in form2 on show folgendes rein schreibe:

repeat
....tue irgendwas

Application.ProcessMessages;
until exitbutton;
close;

Bei diesem code kann ich das Fenster nicht mehr schließen. Friert das Programm ein. Bei jedem Windows 7 oder älter funktioniert solch eine Hauptloop problemlos.
Hat jemand eine Ahnung was bei Windows 10 anders ist.
Bin euch für jede Hilfe dankbar, da mein Latein am ende ist.

Gruß

Achi
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

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

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 08:22
Es ist allgemeines Delphi-Weistum, dass Application.ProcessMessages böse ist. Das beißt dich jetzt wahrscheinlich.
Kannst du die Schleife nicht anders gestalten? Wofür brauchst du das Application.ProcessMessages? Ist Form2 so eine Art Fortschrittsdialog?
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.169 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 08:48
Im OnShow ist das ungünstig plaziert.
Wollen wir sowas gleich nach dem öffnen machen, so legen wir einen Timer aufs Form der im OnShow gestartet wird oder wir senden uns eine WM_USER-Message.

Und ich weiß - Besser wäre ein Thread ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#4

AW: Hilfe application.ProcessMessages bei Win 10

  Alt 22. Jan 2018, 09:04
abgesehen davon das man es wie bereits erwähnt davon abuzraten ist,
versuche ein Sleep(20); in deine repeat schleife zu setzten damit die cpu nicht auf 100% läuft.

alternativ evtl so: (nicht den sleep vergessen!)
(ich weiß nicht ob's ne verbesserung oder verschlechterung zu deinem delphi ist!)

Code:
function MyProcessMessages : Boolean;
const
 WM_QUIT = $0012;
var
 Msg : TMsg;
begin
 Result := False;
 while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do begin
  if Msg.Message = WM_QUIT then
  begin Exit end else begin
   TranslateMessage(Msg);
   DispatchMessage(Msg);
  end;
 end; Result := True;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

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

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
 
#6

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
43.097 Beiträge
 
Delphi 12 Athens
 
#7

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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

n/a Beiträge
 
#8

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.735 Beiträge
 
Delphi 2007 Professional
 
#9

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
43.097 Beiträge
 
Delphi 12 Athens
 
#10

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:15 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