Miten muutetaan ohjelman prioriteettia Windowsissa?

Seuraa 
Viestejä26898
Liittynyt16.3.2005

Teen ohjelmia, jotka laskevat pitkiä aikoja jotain. Olisi mukavaa, jos ei prioriteettia pitäisi aina laittaa pieneksi Task Managerista käsin. Miten muutetaan suoritettavan ohjelman prioriteettia Windowsissa?

Yritin seuraavaa:
[code:22slmtxl]#include
...

int main(void) {
HANDLE thread;

thread=GetCurrentThread();
SetPriorityClass(thread,IDLE_PRIORITY_CLASS);

...
}[/code:22slmtxl]

Tuo GetCurrentThread palauttaa arvon 0xFFFFFFFE, mikä on käsittääkseni järjetön. SetPriorityClass palauttaa virhettä ilmaisevan nollan ja GetLastError antaa virhekoodiksi 6:n (mitä sekin mahtaa tarkoittaa).

Kommentit (4)

Vierailija

En paljoa tiedä, mutta jotain tuli mieleen:

GetCurrentThread() palauttaa pseudo-handlen. Oletko kokeillut DuplicateHandle()-funktiota, jolle antaa parametrina handlen?

BOOL WINAPI DuplicateHandle(
__in HANDLE hSourceProcessHandle, //GetCurrentProcess()
__in HANDLE hSourceHandle, //GetCurrentThread()?
__in HANDLE hTargetProcessHandle, //handle
__out LPHANDLE lpTargetHandle, //???
__in DWORD dwDesiredAccess, //???
__in BOOL bInheritHandle, //true?
__in DWORD dwOptions //???
);

Denzil Dexter
Seuraa 
Viestejä6665
Liittynyt7.8.2007

Tekeekö nuo prioriteetin muutokset oikeasti jotain? En ole omassa koneessa huomannut mitään eroa, oli prioriteetti sitten 5% tai 100%; aina vetää jumiin jos koneella on töitä.

Vierailija

Ei kait ne muuta kuin että jos on useampi säie, niin sitten korkeamman prioriteetin säikeet vievät tehot, alemmat odottavat luppoaikaa.

Idle-thread pyörii aina silloin kun mitään muuta ei tapahdu. Se on joku ikilooppi, joka ei tee juuri mitään. Iteroi ehkä jotain muuttujaa diagnostisista syistä.

Jos on vain yksi alhaisen prioriteetin säie, joka vaatii kaiken prosessoriajan, niin se kyllä ottaa sen, jos ei kukaan muu sitä ota.

Uusimmat

Suosituimmat