Организация мультизадачности для приложений WIN32
Для каждого потока в системе определен квант времени, в течение которого ему принадлежит процессор. В системе реализована стратегия приоритетного планирования, согласно которой любой поток имеет приоритет от 0 до 31, и очередной квант времени выделяется потоку с максимальным приоритетом. Менее привилегированные потоки получают процессор только в том случае, если более приоритетные потоки завершаются или переходят в состояние ожидания (блокируются). Сразу после создания потока он имеет приоритет, равный классу приоритета процесса, создавшего поток (4-для IDLE, 7-9 - для NORMAL, 13 – для HIGH, 24 – для REALTIME). При помощи функции SetThreadPriority поток имеет возможность изменить свой приоритет относительно первоначального. Второй параметр этой функции задает относительное изменение приоритета: THREAD_PRIORITY_HIGHEST (+2), THREAD_PRIORITY_ABOVE_NORMAL (+1), THREAD_PRIORITY_NORMAL (0), THREAD_PRIORITY_BELOW_NORMAL (-1), THREAD_PRIORITY_LOWEST (-2). Параметр THREAD_PRIORITY_IDLE позволяет установить для потока приоритет равный 16 (для процессов с классом приоритета REALTIME) или 1 (для процессов с другим классом приоритета). Аналогичным образом, параметр THREAD_PRIORITY_TIME_CRITICAL позволяет установить для потока приоритет равный 31 (для процессов с классом приоритета REALTIME) или 15 (для процессов с другим классом приоритета). Функция GetThreadPriority позволяет определить текущий приоритет потока. Кроме того, функция SetPriorityClass позволяет установить класс приоритета процесса, а функция GetPriorityClass– определить текущий класс приоритета процесса.
73
Для завершения потока используется функция ExitThread. Эта функция также автоматически вызывается при завершении функции потока. При завершении потока объект ядра поток переводится в состояние signaled, уменьшается на единицу счетчик числа его пользователей, и если счетчик равен нулю объект ядра поток освобождается. Если завершаемый поток является последним активным потоком процесса, то завершается и сам процесс. В API WIN32 имеется также функция TerminateThread, которая позволяет завершить любой процесс, идентификатор которого передается ей в качестве параметра.
предыдущаяследующая