Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Hintergrundaktivität versus ausgelastet (https://www.delphipraxis.net/192027-hintergrundaktivitaet-versus-ausgelastet.html)

EWeiss 14. Mär 2017 16:20

Hintergrundaktivität versus ausgelastet
 
Ich habe jetzt mal so ein Warte Objekt erstellt.
Das Problem ist nun das ich einen Timer verwende anstelle eines Threads.

Ok das kann man später noch ändern.
Was ich jetzt noch nicht berücksichtigt habe ist das dieses Objekt NUR dann angezeigt werden soll wenn die Anwendung ausgelastet ist.

Wie kann ich nun feststellen wann die Anwendung ausgelastet ist so das ich dann in dem Thread die Animation starten\beenden kann?

Im Moment habe ich das Teil in meiner SkinEngine implementiert bei bedarf sollte es aber nicht schwer sein diese in eine eigenständige DLL
zu implementieren so das man diese auch aus der VCL heraus starten kann.

Das Teil soll also später anstelle eines WaitCursor aktiv werden.

Shot ist angehängt.

gruss

Ghostwalker 14. Mär 2017 16:59

AW: Hintergrundaktivität versus ausgelastet
 
Ähm...das dürfte nicht so ganz einfach sein, da das nicht nur von der Anwendung abhängt.

Wenn du das quasi als "Wait"-Cursor-Ersatz baust, würd ich einfach eine Start/Stop Methode
bauen. Der Programmierer (sprich in dem Fall der Nutzer) weiß am besten, wo in seiner Anwendung
kritische Aktionen ablaufen. :)

Ist ja letztlich beim Wait-Cursor auch nicht anders :)

EWeiss 14. Mär 2017 17:05

AW: Hintergrundaktivität versus ausgelastet
 
Zitat:

Zitat von Ghostwalker (Beitrag 1364194)
Ähm...das dürfte nicht so ganz einfach sein, da das nicht nur von der Anwendung abhängt.

Wenn du das quasi als "Wait"-Cursor-Ersatz baust, würd ich einfach eine Start/Stop Methode
bauen. Der Programmierer (sprich in dem Fall der Nutzer) weiß am besten, wo in seiner Anwendung
kritische Aktionen ablaufen. :)

Ist ja letztlich beim Wait-Cursor auch nicht anders :)

Hmmm... Das ist schlecht.
Ich dachte das ich das mit einem Thread verknüpfen kann.

Wie macht man das denn mit den Splash Screens die solange laufen bis die Anwendung fertig mit dem laden ist..
Das ganze von Hand zu starten also an bestimmten Positionen im Code wollte ich eigentlich nicht.

Ein WaitCursor startet doch auch automatisch wenn die Anwendung ausgelastet ist oder nicht?

gruss

t.roller 14. Mär 2017 17:38

AW: Hintergrundaktivität versus ausgelastet
 
Wenn Du es von der CPU-Auslastung abhängig machen willst:
Delphi-Quellcode:
  private
    { Private-Deklarationen }
  Times: TThread.TSystemTimes;
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  TThread.GetSystemTimes(Times);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position := TThread.GetCPUUsage(Times);
Application.ProcessMessages;
If ProgressBar1.Position>50 then...
end;

EWeiss 14. Mär 2017 18:12

AW: Hintergrundaktivität versus ausgelastet
 
Wäre eine Alternative :)
Muss mich aber erst nochmal schlau machen ob es nicht auf einen anderen weg geht. (ala WaitCursor)

gruss

himitsu 14. Mär 2017 18:41

AW: Hintergrundaktivität versus ausgelastet
 
Ist die Anwendung ausgelastet, dann hat sie auch keine Zeit ein Warte-Fenster/Objekt anzuzeigen.
Der Cursor und dessen Animation wird von Windows gesteuert und hängt nicht, wenn dein Programm hängt.

Ausgelastet = es arbeitet was und lässt der VCL keine Chance andere Messages zu verarbeiten.

Ausgelastet im Sinne von "Arbeitet sehr viel, aber lässt ab und an auch Messages durch" ... könnte man die CPU-Auslastung des Hauptthreads oder der ganzen Anwendung bestimmen
und jenachdem wie "stark" es hängt, könnte der Hauptthread eventuell doch die Anzeige des "Ich arbeite" übernehmen.

Hängt es aber komplett, also VCL/Progamm/MainThread:
Da könnte könnte man ein NonVCL-Fenster in einem Thread erstellen+anzeigen oder als "externe" EXE starten+anzeigen.
Ob die Anwendung hängt, kann man erkennen, indem man vom Thread aus regelmäßig dem MainThread eine Message schickt und schaut ob und wann sie zuletzt verarbeitet wurde.

EWeiss 14. Mär 2017 18:52

AW: Hintergrundaktivität versus ausgelastet
 
Zitat:

Da könnte könnte man ein NonVCL-Fenster in einem Thread erstellen+anzeigen oder als "externe" EXE starten+anzeigen.
Das ist was ich vorhabe aber als DLL.
Bin mir aber noch nicht schlüssig wie ich das bewerkstelligen soll.

gruss

Delphi-Laie 14. Mär 2017 21:58

AW: Hintergrundaktivität versus ausgelastet
 
Ist das hier die Nachfolgediskussion zu meiner gestrigen Designanfrage, welcher Mauscursor wohl am besten Beschäftigung bei erhalten gebliebener gleichzeitiger Bedienbarkeit symbolisiert?

EWeiss 14. Mär 2017 22:03

AW: Hintergrundaktivität versus ausgelastet
 
Zitat:

Zitat von Delphi-Laie (Beitrag 1364219)
Ist das hier die Nachfolgediskussion zu meiner gestrigen Designanfrage, welcher Mauscursor wohl am besten Beschäftigung bei erhalten gebliebener gleichzeitiger Bedienbarkeit symbolisiert?

Nö..
Es geht wie du bestimmt schon gelesen hast um einen Ersatz für den WaitCursor.
Also anstelle dessen wird eine Animation abgespielt.

Und da dies nun mal abhängig von der Hintergrundaktivität sowie mit der Auslastung der Anwendung zu tun hat kam mir der Threadtitel gerade recht.
Er ist ja auch nicht gleich ;)

Ich habe dafür aber nochmal einen extra Thread angelegt damit man das Testen kann
und ich die Archive bei bedarf austauschen kann.

gruss

MichaelT 15. Mär 2017 13:36

AW: Hintergrundaktivität versus ausgelastet
 
An sich hat es sich bewährt eine Message zu schicken ...

http://stackoverflow.com/questions/3...514209#3514209

Allein ein Beispiel ... zwar zum IE aber gut.

Zitat:

Zitat von EWeiss (Beitrag 1364181)
gruss



Alle Zeitangaben in WEZ +1. Es ist jetzt 21:24 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