AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Wait Animation
Thema durchsuchen
Ansicht
Themen-Optionen

Wait Animation

Ein Thema von EWeiss · begonnen am 14. Mär 2017 · letzter Beitrag vom 14. Apr 2017
Antwort Antwort
EWeiss
(Gast)

n/a Beiträge
 
#1

AW: Wait Animation

  Alt 15. Mär 2017, 11:42
Logisch. Eine DLL ist kein eigener Prozess. Die Funktionen (und damit die CPU-Last) werden immer dem Prozess zugeordnet, der die entsprechende Funktion nutzt.

Daran würde auch die Abspaltung eines Thread's nichts ändern. Dieser würde genauso vom Prozess (sprich der Anwendung) "abgespalten".
Ok dann muss ich ne EXE erstellen.
Und übergebe das *.PNG über Commandline.
Kein Problem

gruss
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Wait Animation

  Alt 15. Mär 2017, 12:18
hmmm....also.....irgendwie werd ich nicht wirklich schlau, was die WaitCursor sache angeht.

Es gibt, wenn ich hier nicht irre, zwei Situationen, in denen der WaitCursor (Sanduhr) auftaucht.

a) Meine Anwendung ist ausgelastet.

Dann wir der Cursor nur angezeigt, wenn das entsprechend programmiert wurde (sprich Cursor = crHourglass).


b) Windows ist ausgelastet

Dann steuert Windows die Anzeige und zwar global unabhängig von irgendwelchen anderen
Prozessen. In so einem Fall startet aber auch kein Programm mehr.


Hab ich bis dahin schon was falsch verstanden ?

Wenn nicht:

In welchem Fall soll deine Animation jetzt greifen ?

Im Fall a)

Würd ich das wie schon erwähnt, als Komponente machen oder Funktionen mit Start/Stop.

Das wär dann genau als Alternative zu curor := crHourglass bzw. cursor := crDefault

Im Fall b)

hmm...der Fall tritt bei mir nur kurz vor einem Systemcrash auf...da wärs mir dann wurscht was
er da anzeigt.

Aber ok..für den Fall bräuchte es ein Programm, das im Hintergrund die komplette Auslastung
des System prüft, und ggf. die Anzeige startet.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#3

AW: Wait Animation

  Alt 15. Mär 2017, 12:30
Zitat:
als Komponente machen
Nö keine gute Lösung soll unabhängig sein also von VCL/NONVCL

Beispiel:

Wenn ich mit meiner Anwendung eine Liste einlade und die Anwendung dadurch bedingt lange warten muss
beim starten dann soll die Animation angezeigt werden.

Das gleiche bei anderen Prozessen wie beim WaitCursor ist der Thread ausgelastet soll die Animation starten.

Wenn die Anwendung komplett steht brauch ich auch keine Animation mehr da Hilft nur noch ein String/Alt Entfernen
oder halt der Taskmanager über Prozess beenden.

Zitat:
Funktionen mit Start/Stop.
Ist auch nicht ganz so simple denn irgendwie muss ich ja die *.PNG Datei übergeben damit sie von der EXE dann ausgeführt wird.
Das geht am besten über Command-Line wenn ich nicht irre

gruss

Geändert von EWeiss (15. Mär 2017 um 12:34 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: Wait Animation

  Alt 15. Mär 2017, 16:38
Das gleiche als EXE unter Verwendung von Command Line siehe oben.

gruss
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Wait Animation

  Alt 16. Mär 2017, 05:29
Ah...ok...es geht also doch um die Anwendung

Dann würd ich das aber als DLL machen. Damit wird zwar die Last der Anwendung zugeordnet, aber das ist ja auch richtig so, da sie ja auch das Warten verursacht.

Das ganze mit 2-3 Funktionen (start/stop evtl. init fürs PNG) und gut.

Vorteile DLL:

- Ist nur einmal im Speicher, auch wenn mehrere Anwendungen parallel die DLL nutzen
- Die Steuerung ist von der Anwendung aus einfacher.
- Kann von den meisten Programmiersprachen aus genutzt werden (selbst Script-Sprachen)
- Weniger Probleme mit den Windowsrechten auf einem Mehrbenutzer-System (und damit bei der
Installation einer Anwendung)


Vorteile EXE:

- Eigener Prozess unabhängig von der Anwednung


Nachteile DLL:

- Last wird dem Anwendungsprozess zugeordnet

Nachteile EXE:

- Wesentlich höherer Speicherverbrauch bei mehrfacher Nutzung unterschiedlicher Anwendungen
- Commandline-Aufrufe sind für einen Programmierer schwieriger zu handeln, als einfache
Funktions-Aufrufe
- Es gibt Script-Sprachen, die keine Commandline-Aufrufe machen können
- Schwierigeres handling auf Mehrbenutzersystemen, wegen Rechte von Executables.


Eine Komponente könnte man dann auch auf der DLL aufbauen (für die ClickyClicky-Fraction )

Ich hoff ich hab dir jetzt nicht den ganzen Plan über den Haufen geschmissen.
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Wait Animation

  Alt 16. Mär 2017, 06:13
Zitat:
Dann würd ich das aber als DLL machen. Damit wird zwar die Last der Anwendung zugeordnet, aber das ist ja auch richtig so, da sie ja auch das Warten verursacht.
Die frage wäre dann nur was passiert beim laden einer List mit mehr als 5000 Einträge (SoundListe)
wenn das laden schon verhindert das die Anwendung erst später angezeigt wird, läuft die Animation dann noch?
Zitat:
Das ganze mit 2-3 Funktionen (start/stop evtl. init fürs PNG) und gut
Habe zwei Initialize, DeInitialize
Initialize erstellt das Window und startet die Animation (jetzt in einem Thread)
Deinitialize stoppt die Animation und zerstört das Window.
Gut könnte man umbenennen was aber an der eigentlichen Funktion nichts ändert.

Zitat:
Commandline-Aufrufe sind für einen Programmierer schwieriger zu handeln, als einfache Funktions-Aufrufe
Sollte eigentlich kein Problem sein solange man sich an die Gegebenheiten hält.
Delphi-Quellcode:
procedure TForm1.StartAnimation;
var
  ExePath: PWideChar;
  Parameter: PWideChar;
begin
  // Parameter 1 = Png File
  // Parameter 2 = Delay
  // Parameter 3 = ParentHandle
  ExePath := PWideChar(ExtractFilePath(ParamStr(0)) + 'Spinner.exe');
  Parameter := PWideChar('/Eagle.png/30' + '/' + IntToStr(Handle));
  ShellExecute(0, 'open', ExePath, Parameter, nil, SW_SHOW);
end;
Ich parse dann in der Funktion nach dem erstellen des Windows die CmdLine mit dem Delemiter "/"

Delphi-Quellcode:
function IsFile(FileName: String): Boolean;
begin

  Result := FileExists(FileName) and not DirectoryExists(FileName);
end;
Delphi-Quellcode:
    Style := WS_POPUP or WS_VISIBLE;
    MainHandle := CreateWindowExW(WS_EX_TOOLWINDOW or WS_EX_TOPMOST, 'Spinner',
      '', Style, 0, 0, 0, 0, 0, 0, hInstance, nil);

    CmdLine := split(lpCmdLine, '/');

    if High(CmdLine) > 0 then
    begin
      if IsFile(CmdLine[1]) then
        Initialize(StrToInt(CmdLine[3]), MainHandle, ExtractFilePath(ParamStr(0)) + CmdLine[1],
          StrToInt(CmdLine[2]));
    end
    else
      DestroyWindow(MainHandle);
sollte eigentlich für kein Programm ein Problem sein ShellExecute aufzurufen. (Abgesehen von den UAC User Rechten)

Zitat:
Vorteile DLL:

- Ist nur einmal im Speicher, auch wenn mehrere Anwendungen parallel die DLL nutzen
- Die Steuerung ist von der Anwendung aus einfacher.
- Kann von den meisten Programmiersprachen aus genutzt werden (selbst Script-Sprachen)
- Weniger Probleme mit den Windowsrechten auf einem Mehrbenutzer-System (und damit bei der
Installation einer Anwendung)
Das ist alles richtig
Zitat:
Eine Komponente könnte man dann auch auf der DLL aufbauen (für die ClickyClicky-Fraction)
Habe nichts dagegen wenn du Lust hast dir das zu überlassen mit der Komponenten.
Sag bescheid lade dann den Quelltext der DLL hoch .

Optimierung was die CPU Auslastung angeht kann man immer noch.
Ist halt auch abhängig davon wie groß die Animationen sind und dem entsprechenden Delay dazu.
Habe bisher von den erstellten Strips die ich habe eine Last zwischen 0 und 15%

Die Nachteile der EXE sind dann doch schwerwiegender abgesehen davon ob die Animationen auch noch laufen wenn die Anwendung selbst
wartet oder warten muss wenn ich die DLL Version letztendlich verwende.

EDIT:
Eventuell was noch fehlt.
Eine Callback in der die Start und beenden Aufrufe gestartet werden abhängig von der aktuellen Auslastung der Anwendung.
Vielleicht zu kompliziert? (Async Thread?)

gruss

Geändert von EWeiss (16. Mär 2017 um 06:19 Uhr)
  Mit Zitat antworten Zitat
Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Wait Animation

  Alt 16. Mär 2017, 07:04
Zitat:
Dann würd ich das aber als DLL machen. Damit wird zwar die Last der Anwendung zugeordnet, aber das ist ja auch richtig so, da sie ja auch das Warten verursacht.
Die frage wäre dann nur was passiert beim laden einer List mit mehr als 5000 Einträge (SoundListe)
wenn das laden schon verhindert das die Anwendung erst später angezeigt wird, läuft die Animation dann noch?
Da der die Startfunktion vor dem Starten der Ladefunktion aufgerufen wird, wird die auch
zuerst ausgeführt Sollte also schonmal kein Problem sein. Natürlich kann es zu Ruckel-Effekten
kommen, wenn das ganze den Rechner arg überlastet, aber das Problem hast du mit jeglichen Geschichten in der Hinsicht (selbst mit der simplen Progress-Bar).

Zitat:
Zitat:
Das ganze mit 2-3 Funktionen (start/stop evtl. init fürs PNG) und gut
Habe zwei Initialize, DeInitialize
Initialize erstellt das Window und startet die Animation (jetzt in einem Thread)
Deinitialize stoppt die Animation und zerstört das Window.
Gut könnte man umbenennen was aber an der eigentlichen Funktion nichts ändert.
Richtig, wie sie heißen is Wurscht.

Zitat:
Zitat:
Commandline-Aufrufe sind für einen Programmierer schwieriger zu handeln, als einfache Funktions-Aufrufe
Sollte eigentlich kein Problem sein solange man sich an die Gegebenheiten hält.
Delphi-Quellcode:
procedure TForm1.StartAnimation;
var
  ExePath: PWideChar;
  Parameter: PWideChar;
begin
  // Parameter 1 = Png File
  // Parameter 2 = Delay
  // Parameter 3 = ParentHandle
  ExePath := PWideChar(ExtractFilePath(ParamStr(0)) + 'Spinner.exe');
  Parameter := PWideChar('/Eagle.png/30' + '/' + IntToStr(Handle));
  ShellExecute(0, 'open', ExePath, Parameter, nil, SW_SHOW);
end;
Ich parse dann in der Funktion nach dem erstellen des Windows die CmdLine mit dem Delemiter "/"

Delphi-Quellcode:
function IsFile(FileName: String): Boolean;
begin

  Result := FileExists(FileName) and not DirectoryExists(FileName);
end;
Delphi-Quellcode:
    Style := WS_POPUP or WS_VISIBLE;
    MainHandle := CreateWindowExW(WS_EX_TOOLWINDOW or WS_EX_TOPMOST, 'Spinner',
      '', Style, 0, 0, 0, 0, 0, 0, hInstance, nil);

    CmdLine := split(lpCmdLine, '/');

    if High(CmdLine) > 0 then
    begin
      if IsFile(CmdLine[1]) then
        Initialize(StrToInt(CmdLine[3]), MainHandle, ExtractFilePath(ParamStr(0)) + CmdLine[1],
          StrToInt(CmdLine[2]));
    end
    else
      DestroyWindow(MainHandle);
sollte eigentlich für kein Programm ein Problem sein ShellExecute aufzurufen. (Abgesehen von den UAC User Rechten)
Aber im Vergleich zu einem Funktionsaufruf doch weit umständlicher

Zitat:
Zitat:
Vorteile DLL:

- Ist nur einmal im Speicher, auch wenn mehrere Anwendungen parallel die DLL nutzen
- Die Steuerung ist von der Anwendung aus einfacher.
- Kann von den meisten Programmiersprachen aus genutzt werden (selbst Script-Sprachen)
- Weniger Probleme mit den Windowsrechten auf einem Mehrbenutzer-System (und damit bei der
Installation einer Anwendung)

Das ist alles richtig
Zitat:
Eine Komponente könnte man dann auch auf der DLL aufbauen (für die ClickyClicky-Fraction)
Habe nichts dagegen wenn du Lust hast dir das zu überlassen mit der Komponenten.
Sag bescheid lade dann den Quelltext der DLL hoch .
Optimierung was die CPU Auslastung angeht kann man immer noch.
Ist halt auch abhängig davon wie groß die Animationen sind und dem entsprechenden Delay dazu.
Habe bisher von den erstellten Strips die ich habe eine Last zwischen 0 und 15%

Die Nachteile der EXE sind dann doch schwerwiegender abgesehen davon ob die Animationen auch noch laufen wenn die Anwendung selbst
wartet oder warten muss wenn ich die DLL Version letztendlich verwende.
[/QUOTE]

Das mit der Komponente kann ich gerne machen. Btw..da fällt mir ein, wenn jemand unbedingt das
als eigenständige EXE braucht, kann er sich ja auch ein kleines Programmschreiben, das dann extra
ausgeführt wird
Zitat:
EDIT:
Eventuell was noch fehlt.
Eine Callback in der die Start und beenden Aufrufe gestartet werden abhängig von der aktuellen Auslastung der Anwendung.
Vielleicht zu kompliziert? (Async Thread?)

gruss
Die Auslastung würd ich garnicht hernehmen, schließlich muss die permanent überprüft werden (egal ob nun in der Anwendung selbst oder in einem externen Programm oder in der DLL).
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:29 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