Prioritetsökningar

Varje tråd har en dynamisk prioritet. Det här är den prioritet som schemaläggaren använder för att avgöra vilken tråd som ska köras. Till en början är en tråds dynamiska prioritet samma som dess basprioritet. Systemet kan öka och sänka den dynamiska prioriteten för att säkerställa att den är dynamisk och att inga trådar svälter under processortiden. Systemet ökar inte prioriteten för trådar med en basprioritetsnivå mellan 16 och 31. Endast trådar med basprioritet mellan 0 och 15 får dynamiska prioritetsökningar.

Systemet ökar den dynamiska prioriteten för en tråd för att förbättra svarstiden enligt följande.

  • När en process som använder NORMAL_PRIORITY_CLASS försätts i förgrunden ökar schemaläggaren prioritetsklassen för den process som är associerad med förgrundsfönstret, så att den är större än eller lika med prioritetsklassen för alla bakgrundsprocesser. Prioritetsklassen återgår till sin ursprungliga inställning när processen inte längre finns i förgrunden.

  • När ett fönster tar emot indata, till exempel tidsinställda meddelanden, musmeddelanden eller tangentbordsindata, ökar schemaläggaren prioriteten för den tråd som äger fönstret.

  • När väntevillkoren för en blockerad tråd är uppfyllda ökar schemaläggaren trådens prioritet. När till exempel en vänteåtgärd som är associerad med disk- eller tangentbords-I/O slutförs får tråden en prioritetsökning.

    Du kan inaktivera funktionen priority-boost genom att anropa funktionen SetProcessPriorityBoost eller SetThreadPriorityBoost. Om du vill avgöra om den här funktionen har inaktiverats anropar du funktionen GetProcessPriorityBoost eller GetThreadPriorityBoost.

När du har höjt en tråds dynamiska prioritet minskar schemaläggaren den prioriteten med en nivå varje gång tråden slutför en tidssektor tills tråden återgår till sin basprioritet. En tråds dynamiska prioritet är aldrig mindre än dess basprioritet.