Seite 1 von 2

Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 02.02.2014 11:40
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

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 02.02.2014 11:48
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.

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 02.02.2014 12:28
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....

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 02.02.2014 12:41
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


Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 03.02.2014 21:18
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 ?

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 03.02.2014 21:29
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.

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 03.02.2014 21:41
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

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 03.02.2014 21:45
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? ^^

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 03.02.2014 21:55
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.

Re: Realtimepriorität geht nicht unter Win 8 ?

Verfasst: 04.02.2014 19:08
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 ?