Приоритети и график
Както бе споменато по-рано, операционната система е отговорна за разпределянето на множество процесорни цикъла към всяка нишка, през която те могат да работят. Количеството време, отделено на отделна нишка, зависи от нейния приоритет. Приоритетът на отделна нишка се определя от комбинация от приоритета на процеса, създал нишката (т.нар приоритетен клас (приоритетен клас)) и приоритета спрямо самия поток (наречен относителен приоритет (относителен приоритет)).
Приоритет на клас на процеса
Приоритетът на клас процес описва приоритета на определен процес, изпълняван в системата. Win32 поддържа четири различни приоритета на класа: Idle, Normal, High и Realtime. По подразбиране на всеки процес се присвоява приоритет Nor-mal. Всеки от изброените приоритети има съответния флаг, дефиниран в модула на Windows. Използвайки операцията OR (или), всеки от тези флагове може да бъде логично комбиниран с параметъра dwCreationFlags на функцията CreateProcess (), което ще позволи на процеса да зададе необходимия приоритет при хвърляне на хайвера. В допълнение, такива флагове могат да се използват за динамично задаване на приоритета на класа на даден процес, както ще бъде показано по-долу. Всички класове могат да бъдат присвоени на приоритетни нива, които са изразени в числови стойности, намерени
вариращи от 4 до 24 включително.
В Windows NT промяната на приоритета на клас процес изисква този процес да има специални привилегии. Определени приоритети на класа могат да бъдат присвоени на процеси, използващи стандартни параметри, но те могат да бъдат деактивирани от системните администратори - по-специално на силно заредени Windows NT/2000 сървъри.
Таблица 5.1 показва всички съществуващи приоритети на класа, съответстващите им флагове и числови стойности.
Таблица 5.1. Обработвайте приоритетите на класа
* Тези стойности са налични само за Windows 2000 и съответните константи на флага са
дуле Windpws.pas Delphi 6 липсва.
Функциите GetPriorityClass () и SetPriorityClass () се предоставят в Win32 API за динамично четене и задаване на приоритета на класа на даден процес. Тези функции се дефинират както следва:
функция GetPriorityClass (hProcess: THandle): DWORD; stdcall;
функция SetPriorityClass (hProcess: THandle;
dwPriorityClass: DWORD): BOOL; stdcall;
И в двете функции параметърът hProcess е манипулатор на процеса. Най-честото използване на тези функции е за достъп до приоритетната стойност на родния клас процес. В този случай можете да се обърнете и към функцията на Win32 API GetCurrentProcess (), която е дефинирана както следва: