![]() |
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 |
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 :) |
AW: Hintergrundaktivität versus ausgelastet
Zitat:
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 |
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; |
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 |
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. |
AW: Hintergrundaktivität versus ausgelastet
Zitat:
Bin mir aber noch nicht schlüssig wie ich das bewerkstelligen soll. gruss |
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?
|
AW: Hintergrundaktivität versus ausgelastet
Zitat:
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 ![]() und ich die Archive bei bedarf austauschen kann. gruss |
AW: Hintergrundaktivität versus ausgelastet
An sich hat es sich bewährt eine Message zu schicken ...
![]() Allein ein Beispiel ... zwar zum IE aber gut. Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 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