Чтобы присвоить потоку относительный приоритет

Чтобы присвоить потоку относительный приоритет

Создание эффективных Win32-приложений - ДЖ. Рихтер

Команда Start допускает также ключи /BELOWNORMAL, /NORMAL, /ABOVENORMAL, /HIGH и /REALTIME, позволяющие начать выполнение программы с соответствующим классом приоритета. Разумеется, после запуска программа может вызвать SetPriority- Class и установить себе другой класс приоритета.

WINDOWS В Windows 98 команда Start не поддерживает ни один из этих ключей. Из обо- УО лочки командного процессора Windows 98 процессы всегда запускаются с классом приоритета normal.

Task Manager в Windows 2000 дает возможность изменять класс приоритета про­цесса. На рисунке ниже показана вкладка Processes в окне Task Manager со списком выполняемых на данный момент процессов. В колонке Base Pri сообщается класс приоритета каждого процесса. Вы можете изменить его, выбрав процесс и указав другой класс в подменю Set Priority контекстного меню.

Только что созданный поток получает относительный приоритет normal. Почему CreateThread не позволяет задать относительный приоритет — для меня так и остает­ся загадкой. Такая операция осуществляется вызовом функции:

BOOL SetThreadPriority(

HANDLE hThread, int nPriority);

Разумеется, параметр hThread указывает на поток, чей приоритет Вы хотите из­менить, а через nPriority передается один из идентификаторов (см. таблицу ниже).

Функция GetThreadPriority, парная SetThreadPriority, позволяет узнать относитель­ный приоритет потока:

int GetThreadPriority(HANDLE hThread);

Она возвращает один из идентификаторов, показанных в таблице выше.

Чтобы создать поток с относительным приоритетом idle, сделайте, например, так:

DWORD dwThreadID;

HANDEE hThread = CreateThread^UEE, 0, ThreadFunc, NUEE,

CREATE_SUSPENDED, &dwThreadID);

SetThгeadPгioгity(hThгead, THREAD_PRIORITY_IDEE);

ResumeThгead(hThгead):

CloseHandle(hThгead):

Заметьте, что CreateThread всегда создает поток с относительным приоритетом normal. Чтобы присвоить потоку относительный приоритет idle, создайте приоста­новленный поток, передав в CreateThread флаг CREATE_SUSPENDED, а потом вызови­те SetThreadPriority и установите нужный приоритет. Далее можно вызвать Resume- Thread, и поток будет включен в число планируемых. Сказать заранее, когда поток получит процессорное время, нельзя, но планировщик уже учитывает его новый при­оритет. Выполнив эти операции, Вы можете закрыть описатель потока, чтобы соот­ветствующий объект ядра был уничтожен по завершении данного потока.

Новости

все
25.07.2012
Главный инспектор аэрокосмического агентства США, НАСА, сообщил о расследовании скандального
24.07.2012
Анонсированы Leica M9 и X1: карманный FF и APS-C с фиксом Для тех, кто не желает таскать с
23.07.2012
Скоро беспроводная сеть позволит посмотреть сквозь стену? Видеть сквозь препятствия –

Дизайны

Разработали структуру сайта, создали сайт, соответствующий всем требованиям заказчика. Создали
Разработали структуру сайта, создали сайт по новым технологиям. Создали индивидуальный и
ООО Транспортная Компания «ТрансРусь» предлагает Вам свои услуги по приемке и