Entwickler-Ecke

Off Topic - Volle Systemleistung erhalten??


andras - Mi 05.10.05 15:51
Titel: Volle Systemleistung erhalten??
hallo!
ich hab ein programm, in dem riesige schleifen durchlaufen werden. kann ich da irgendwie das betriebssystem so weit abdrehen, dass es halt nur mehr die speicherverwaltung und so zeug macht, aber damit mein programm den meisten teil aller resourcen verwenden kann.
danke schon im voraus!!


Delete - Mi 05.10.05 15:54

Ja, starte einfach kein weiteres Programm, dann bekommt dein Programm 100% der CPU Zeit.


andras - Mi 05.10.05 15:57

so weit war ich auch schon... :wink:
aber ich meine die ganze grafiksch.... von windows die wird wohl auch was brauchen, oder?


Delete - Mi 05.10.05 16:01

Bitte wie?


firus1983 - Mi 05.10.05 16:10

das hält sich arg in Grenzen.
Wenn du mal den Taskmanager aufmachst und schaust wieviel Prozent dein Leerlaufprozess hat, dann wirst du sehen dass ausser dem Taskmanager selbst kaum ein anderes Programm CPU-Last hat.


ManuelGS - Mi 05.10.05 16:39

Wenn dir das restl. System wirklich egal ist, setz dein Programm auf Echtzeit, mach alle application.processmessages und restlichen Kram raus. Wenn dein Algorithmus dann fertig ist, Priorität wieder runtersetzen. Kannst dann während des Algorithmus sowas wie Ausgabe oder Eingabe natürlich absolut vergessen. Maus wird auch nicht mehr gehen; wenn dein Programm hängt, nützt nur noch RESET, ...


andras - Fr 07.10.05 17:03

ok, ich glaub das ist das was ich suche.
gibts da irgendwelche delphi-befehle, mit denen man das auf echtzeit setzten kann, weil immer den taskmanager zu straten und die priorität zu ändern ist ja auch nicht grad toll


GTA-Place - Fr 07.10.05 17:29

Suche in der Entwickler-Ecke PRIORIT?T
Da findet man bestimmt etwas.


ManuelGS - Sa 08.10.05 00:07

Windwos bringt den Befehl "start" mit. Starte mal die Eingabeaufforderung und gib "start /?" ein. Damit kannst du zwar ein Programm mit Echtzeit-Priorität starten, allerdings wohl nicht mehr runtersetzen.


Chryzler - Sa 08.10.05 12:53

Hallo!

ich hab mal schnell was gecoded:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure SetPriority(PriorityClass: Integer);
var
PID, hProcess: Integer;
begin
GetWindowThreadProcessId(Application.MainForm.Handle, @PID);
hProcess := OpenProcess(PROCESS_SET_INFORMATION, false, PID);
SetPriorityClass(hProcess, PriorityClass);
end;


PriorityClass kannst du z.B. auf REALTIME_PRIORITY_CLASS und nach der Schleife wieder auf NORMAL_PRIORITY_CLASS setzen.


BenBE - Sa 08.10.05 14:12

Den Source würd ich bei mir nichtmal im Ansatz so nehmen, da
1. Handles geöffnet werden, ohne sie wieder freizugeben
2. Man alle benötigten Infos für ein SetPriorityClass (sofern lokal für den eigenen Prozess) auch ohne OpenProcess ausführen kann.


Delete - Sa 08.10.05 14:54

Warum nicht einfach:

Delphi-Quelltext
1:
SetPriorityClass(GetCurrentProcess, PriorityClass);                    

Von REALTIME_PRIORITY_CLASS ist allerdings dringenst abzuraten, da selbst wichtige Systemprozesse mit einer niedrigeren Priorität laufen. Außerdem garantiert selbst das nicht, dass kein anderer Thread außer deinem noch CPU Ziet zugeteilt bekommt.

Was willst du denn eigentlich machen?


Delphi-Laie - Sa 07.11.09 11:58

user profile iconManuelGS hat folgendes geschrieben Zum zitierten Posting springen:
Windwos bringt den Befehl "start" mit. Starte mal die Eingabeaufforderung und gib "start /?" ein. Damit kannst du zwar ein Programm mit Echtzeit-Priorität starten, allerdings wohl nicht mehr runtersetzen.


Wohl nicht? Also, in meinem Windows (2000) ist es möglich. Mehr noch: Nach meiner Beobachtung kann man die Prozeßpriorität jederzeit (also zum Start und während des Laufens) sowohl von außen (start.exe, Taskmanager & Co.) als auch von innen (d.h., vom Programm selbst) ändern (lassen). Ich vermute stark, daß für die Threads grundsätzlich gleiches gilt.


platzwart - Sa 07.11.09 14:32

Du hast auf eine über 4 Jahre alte Frage geantwortet?!?