Realtimepriorität geht nicht unter Win 8 ?

Für allgemeine Fragen zur Programmierung mit PureBasic.
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Realtimepriorität geht nicht unter Win 8 ?

Beitrag von 3dhubiflieger »

Hallo, ich bin grad am debuggen meines immer noch nicht so recht lauffähigen Programmes.
Da ich es allgemein läuffähig machen will, gibt es jetzt wieder mit dieser Prozedur in Windows 8 das Problem das ich kein Realtime setzen kann. Das heisst, ich übergebe an die Prozedur die PID
und die Prioritaetsnummer 6. Wenn ich aber dann in den Taskmanager von Win 8 schau, steht da nur High Priority Class. Also eine Stufe weniger ? In Xp gehts komischerweisse wieder ??
Gibts da wieder Adminrechte ? :mrgreen:

Code: Alles auswählen

Procedure setzePrioritaet(PID,Prioritaet)
   ph = OpenProcess_(#PROCESS_SET_INFORMATION, #True, PID)
  
   Select Prioritaet
   Case 1 
    SetPriorityClass_(Ph ,#IDLE_PRIORITY_CLASS)  
   Case 2  
    SetPriorityClass_(Ph ,#BELOW_NORMAL_PRIORITY_CLASS)
   Case 3
    SetPriorityClass_(Ph ,#NORMAL_PRIORITY_CLASS)
   Case 4
    SetPriorityClass_(Ph ,#ABOVE_NORMAL_PRIORITY_CLASS) 
   Case 5
    SetPriorityClass_(Ph ,#HIGH_PRIORITY_CLASS)
   Case 6
    SetPriorityClass_(Ph ,#REALTIME_PRIORITY_CLASS)
   EndSelect 
  
  CloseHandle_(ph)
EndProcedure
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von ts-soft »

Du möchtest Deinem Programm eine Priorität, höher als die Prozesse des Betriebssystems zuordnen? :freak:
Und das vielleicht noch ohne selber Adminrechte zu haben?
Habe ich Dich recht verstanden, ich Zweifel ein wenig :mrgreen:

Dein Programm wird dadurch keinesfalls besser laufen, der einzige Erfolg könnte sein, das Dein
Betriebssystem instabil wird.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von 3dhubiflieger »

Das das System instabiler wird weiss ich schon. Das zu startende Programm läuft dann allerdings auch etwas schneller...Dolphin Emulator (ergibt mehr frames). Aber zurück zum eigentlichen Problem...
In XP kann ich Realtime setzen. In Windows 8 nicht. Muss ich noch irgend ne Api funktion vorschieben damit das richtig funktioniert ? Werd gleich mal weiter probiern....
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von - chris - »

Unter Window 7 und Windows 8 funktioniert es so, aber nur mit Admin-Rechten ("Als Administrator ausführen"):

Ohne "Als Administrator ausführen" geht es bis maximal Priorität Hoch.

Code: Alles auswählen


Procedure setzePrioritaet(PID,Prioritaet)
   ph = OpenProcess_(#PROCESS_SET_INFORMATION, #True, PID)
 
   Select Prioritaet
   Case 1
    SetPriorityClass_(Ph ,#IDLE_PRIORITY_CLASS) 
   Case 2 
    SetPriorityClass_(Ph ,#BELOW_NORMAL_PRIORITY_CLASS)
   Case 3
    SetPriorityClass_(Ph ,#NORMAL_PRIORITY_CLASS)
   Case 4
    SetPriorityClass_(Ph ,#ABOVE_NORMAL_PRIORITY_CLASS)
   Case 5
    SetPriorityClass_(Ph ,#HIGH_PRIORITY_CLASS)
   Case 6
    SetPriorityClass_(Ph ,#REALTIME_PRIORITY_CLASS)
   EndSelect
 
  CloseHandle_(ph)
EndProcedure

pid$ = InputRequester("Prioritaet", "PID: ", "")

Debug pid$

PID = Val(pid$)

If PID > 0
  
  setzePrioritaet(PID,6)
  
EndIf

PB v5.72 x86/x64
Windows 10 Pro 64bit
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von 3dhubiflieger »

Also ich hab jetzt hin und herprobiert unter Windows 8 geht die Prozedur nicht richtig. Bei manchen Anwendungen kann ich nix verändern, bei anderen nur bis zu einem gewissen Level. Wie bau ich das in die Prozedur ein ...als Admin ausführen ?? Kann vielleicht jemand das umschreiben das es überall geht ?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von NicTheQuick »

Es ist ganz normal, dass man die Priorität eines Prozesses nicht erhöhen kann, wenn man kein Admin ist. Dass das bei Windows früher ging, ist das Resultat einer schlechten Rechteverwaltung. Immerhin wird es ja von Windows zu Windows immer besser.

Im Umkehrschluss heißt das, dass du nicht darum herum kommst Administratorrechte vor dem Start deines Programms einzuholen. Wenn ich einen Vergleich zu Linux machen darf: Da kann man die Priorität eines Prozesses als normaler Nutzer nur erniedrigen, aber niemals erhöhen. Und das hat gute Gründe. Es wäre ja schlecht, wenn ein Virus das einfach so machen könnte und somit das ganze System lahmlegen könnte.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von ts-soft »

NicTheQuick hat geschrieben:Wenn ich einen Vergleich zu Linux machen darf: Da kann man die Priorität eines Prozesses als normaler Nutzer nur erniedrigen, aber niemals erhöhen.
Bist Du da sicher? Lt meinen Unterlagen, und meiner evtl. schlechten Übersetzung von "man renice", kann der Besitzer
die Prirorität von 0 (höchste) bis 20 (niedrigste) ändern, aber nicht unter 0 (-20 ist die höchste Prirorität).

So hab ich es jedenfalls in 2 Linux-Büchern (die ich gerade Lese, wegen meiner bevorstehenden LPI-Prüfung) gelesen und
so würde ich auch die manpage zu dem Befehl renice verstehen.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8837
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von NicTheQuick »

Ja, weil bei Linux -20 die höchste Priorität ist. Mit "Erhöhen" meinte ich auch "Verringern bei Linux". Wie soll ich es denn anders formulieren? ^^
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von ts-soft »

Ne, haste wieder verkehrt verstanden, der Besitzer darf die Prioriät auch erhöhen, aber nur bis 0, bis -20 darf nur root.
Normale Priorität ist 10 und der Besitzer der Datei kann die Priorität mit renice bis 0 hochsetzen :mrgreen:

Aber es wird ein bissel off.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
3dhubiflieger
Beiträge: 123
Registriert: 27.10.2013 12:13

Re: Realtimepriorität geht nicht unter Win 8 ?

Beitrag von 3dhubiflieger »

So, hab jetzt nen Hinweis eingebaut, das man das Programm als Admin einstellen soll (inkl Vorgehensweise). Dabei ergibt sich das nächste Problem....Im Admin Modus kommt jetzt immer eine Sicherheitsabfrage, welche ziemlich lässtig ist. Damit könnte ich ja noch leben. Aber dummerweise kann ich das Programm jetzt auch nicht mehr automatisch über einen Eintrag in der Registry starten lassen ?? Warum denn jetzt das ? Wie kann ich das beheben ?
Antworten