Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Optimierung der Prioritäten (https://www.delphipraxis.net/95348-optimierung-der-prioritaeten.html)

bluescreen25 5. Jul 2007 11:50


Optimierung der Prioritäten
 
wenn ich aus der meiner MP3-Anwendung heraus ein externes Programm starte, kommt es genau beim Start zu hohen CPU-Auslastungen, so das ich kurze Aussetzer bei der Wiedergabe von MP3 habe.

Ich habe mich mal in Thread und Process-Prioritäten eingelesen und auch soweit Resultate, nur wie macht man es richtig bzw optimiert ?

Ich möchte die externe Anwendung soweit wie möglich in der CPU-Auslastung gebremst starten, sodas es die Hauptanwendung nicht stört.

Hier mal mein Code dazu:

Code:
     var
      app,appWithPath,WndClass: String;
      ProcID,ThreadID: Cardinal;
      AppWindow,Wnd : HWnd;


    begin
      ....
      ProcID := 0;                        
      AppWindow := 0;
      RunProcess(appWithPath, SW_SHOW, FALSE, @ProcID);
      SetProcessPriorty(ProcID,IDLE_PRIORITY_CLASS); //  zum testen !
      SetThreadPriority(GetCurrentThreadId,THREAD_PRIORITY_IDLE);
      repeat
        AppWindow := GetWndHandle(ProcID);
        application.ProcessMessages;    
        sleep(500);                      
      until (AppWindow <> 0) or stopSearch; //stopSearch durch Timer, falls gar nicht findet
      if AppWindow <> 0 then
         begin
           Sleep(500);
           SetThreadPriority(GetCurrentThreadId,THREAD_PRIORITY_NORMAL);
           SetProcessPriorty(ProcID,NORMAL_PRIORITY_CLASS); // zum testen !
         end;
       ....

Gausi 5. Jul 2007 11:58

Re: Optimierung der Prioritäten
 
Bist du dir denn sicher, dass die Aussetzer durch die hohe CPU-Last verursacht werden? Ich würde nämlich auf ein kurzzeitiges Aussetzen des Datenstroms tippen, weil die Platte gerade mit anderen Dingen beschäftigt ist.
Hier wäre dann die Lösung nicht ein umsetzen der Prioritäten, sondern ein Vergrößern des Playerbuffers.

bluescreen25 5. Jul 2007 12:16

Re: Optimierung der Prioritäten
 
Zitat:

Zitat von Gausi
Bist du dir denn sicher, dass die Aussetzer durch die hohe CPU-Last verursacht werden? Ich würde nämlich auf ein kurzzeitiges Aussetzen des Datenstroms tippen, weil die Platte gerade mit anderen Dingen beschäftigt ist.
Hier wäre dann die Lösung nicht ein umsetzen der Prioritäten, sondern ein Vergrößern des Playerbuffers.

Der erste Weg zur Verbesserung lag in dem Sleep innerhalb der Repeat-Schleife.
Die Schleife frist schon ziemliche Resourcen, bis die nach Start des ext. Progs aufgehoben wird.

Was im Code jetzt nicht zu sehen ,ist ist die alternative Findwindow innerhalb der Schleife.

Der Puffer des Player ist Standart, die CPU-Zeit 100% gewesen bevor sleep hinzukam.

Was mich jetzt interessiert ist, ob am Code da was zu optimieren gilt ?
Macht das Sinn, so die Prios zu setzen um die aus meinem Prog. aufgerufenen Apps "im Hintergrund" starten zu lassen (Resourcenschonend) ?


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