| |
|
|
| Hallo Profaner...
Welche Rückmeldungen liefert folgender Quelltext unter XP??? KompilierenMarkierenSeparierenDef @SetPriorityClass(2) !"KERNEL32","SetPriorityClass"
DEF @FormatMessage(7) !"KERNEL32","FormatMessageA"
DEf @GetLastError(0) !"KERNEL32","GetLastError"
Def @GetCurrentProcess(0) !"KERNEL32","GetCurrentProcess"
DEf @SetLastError(1) !"KERNEL32","SetLastError"
Def GetPriorityClass(1) !"KERNEL32","GetPriorityClass"
DEF SetThreadPriority(2) !"KERNEL32","SetThreadPriority"
DEF GetCurrentThread(0) !"KERNEL32","GetCurrentThread"
DEF GetThreadPriority(1) !"KERNEL32","GetThreadPriority"
Declare GETERROR_Buffer#,Fehler&,PHandle&,THandle&
PROC LastError
Parameters Rückgabe&
Declare GETERROR_Buffer$
DIM GETERROR_Buffer#,32000
@FormatMessage($1000,0,Rückgabe&,0,GETERROR_Buffer#,32000,0)
Let GETERROR_Buffer$=@STRING$(GETERROR_Buffer#,0)
Dispose GETERROR_Buffer#
Return GETERROR_Buffer$
Endproc
Windowstyle 31
Windowtitle "Priorität setzen"
Window 0,0-640,440
Addstring "Priorität des Prozesses="
ADDSTRING " Priorität vorher: "+@str$(GetPriorityClass(GetCurrentProcess()))
@SetLastError(0)
LET PHANDLE&=@GetCurrentProcess()
LET FEHLER&=@SetPriorityClass(PHANDLE&,$100)
LastError @GetLastError()
ADDSTRING " Rückmeldung SetPriorityClass: "+@STR$(Fehler&)
ADDSTRING " Priorität jetzt: "+@str$(GetPriorityClass(GetCurrentProcess()))
ADDSTRING " "+@$(0)
Addstring "Priorität des Threads="
ADDSTRING " Priorität vorher: "+@str$(GetThreadPriority(GetCurrentThread()))
@SetLastError(0)
LET THANDLE&=@GetCurrentThread()
LET FEHLER&=@SetThreadPriority(THANDLE&,$F)
LastError @GetLastError()
ADDSTRING " Rückmeldung SetThreadPriority: "+@STR$(Fehler&)
ADDSTRING " Priorität jetzt: "+@str$(GetThreadPriority(GetCurrentThread()))
ADDSTRING " "+@$(0)
@EDITBOX("Rückgaben",1)
While 0=0
Waitinput
Wend
PS: Für die die sich nicht auskennen -> Code ist wegen Waitinput trotz $100 bei SetPriorityClass unbedenklich... Ich erhöhe hier vor allen Dingen mit SetPriorityClass die Priorität des aktuellen Prozeses und damit auch die Zeit, die einem einzelnen Prozess (eigentlich Thread) zum Durchführen von Berechnungen zur Verfügung steht. Da hier Waitinput eingebaut ist und sonst keine Aktionen erfolgen, wird der Boost dieses Prozesses nicht erhöht und das System bleibt stabil. |
|
|
| |
|
|
|
Torsten Rümker | |
|
| Ich lerne, ob ich will oder nicht! Betriebssystem: - Ubuntu 15.x - Windows (diverse) XProfan Version: X2 | 08.10.2005 ▲ |
|
|
|
|
| Besten Dank Torsten, hat geholfen - jetzt sehe ich klarer... |
|
|
| |
|
|
|
Michael Wodrich | |
|
| Programmieren, das spannendste Detektivspiel der Welt. | 08.10.2005 ▲ |
|
|
|
|
| OK, was undokumentiertes: Das Privileg SeIncreaseBasePriority schränkt die API API SetPriorityClass ein. SetPriorityClass ist dabei nicht auf die Aktivierung des Privilegs angewiesen, sondern aktiviert dieses selbst - es muß also nur vorhanden sein. Fehlt das angesprochene Privileg, kann die REALTIME_PRIORITY_CLASS ($100) nicht vergeben werden. Wird versucht diese Priorität zu vergeben, wird die Priorität auf den dann höchsten Wert ($80) HIGH_PRIORITY_CLASS gesetzt. Eine Rückmeldung über evtl. nicht vorhandene Rechte erfolgt nicht.
Diese Aussage ist nirgendwo sonst im Netz dokumentiert, und ich will hoffen, daß diese Stelle gut aufgehoben und gepflegt wird!
Die API SetThreadPriority wird nicht durch das Privileg eingeschränkt, obwohl diese API ebenfalls zum Setzen der Basispriorität beiträgt! |
|
|
| |
|
|