Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка 2.doc
Скачиваний:
18
Добавлен:
13.02.2015
Размер:
1.23 Mб
Скачать

Коды завершения в ос Windows

Код

Значение

0

The operation completed successfully (EXIT_SUCCESS)

1

Incorrect function. EXIT_FAILURE

2

The system cannot find the file specified.

3

The system cannot find the path specified.

4

The system cannot open the file.

5

Access is denied.

6

The handle is invalid.

7

The storage control blocks were destroyed.

8

Not enough storage is available to process this command.

9

The storage control block address is invalid.

10

The environment is incorrect.

11

An attempt was made to load a program with an incorrect format.

12

The access code is invalid.

13

The data is invalid.

14

Not enough storage is available to complete this operation.

15

The system cannot find the drive specified.

16

The directory cannot be removed.

  1. Установка приоритета потока

Функция SetThreadPriority устанавливает значение приоритета для заданного потока. Это значение, вместе с классом приоритета процесса потока, обуславливает базовый уровень приоритета потока.

Синтаксис

BOOL SetThreadPriority(

HANDLE hThread, // дескриптор потока

int nPriority¶¶ // уровень приоритета потока

);

Параметры

hThread – дескриптор потока, значение приоритета которого должно быть установлено. В Windows NT/2000/XP дескриптор должен иметь право доступа THREAD_SET_INFORMATION связанное с ним.

nPriority значение приоритета для потока. Этот параметр может быть одним из следующих значений:

Таблица №2

Относительные приоритеты потоков

Приоритет

Значение

THREAD_PRIORITY_ABOVE_NORMAL

Приоритет на 1 пункт выше класса приоритета.

THREAD_PRIORITY_BELOW_NORMAL

Приоритет на 1 пункт ниже класса приоритета.

THREAD_PRIORITY_HIGHEST

Приоритет на 2 пункта выше класса приоритета.

THREAD_PRIORITY_IDLE

Базовый приоритет 1 для всех классов приоритетов процессов за исключением класса REALTIME_PRIORITY_CLASS.

Для него уровень базового приоритета 16

THREAD_PRIORITY_LOWEST

Приоритет на 2 пункта ниже класса приоритета.

THREAD_PRIORITY_NORMAL

Нормальный приоритет класса приоритета.

THREAD_PRIORITY_TIME_CRITICAL

Базовый приоритет 15 для всех классов приоритетов процессов за исключением класса приоритета REALTIME_PRIORITY_CLASS. Для него уровень базового приоритета 16

Windows 2000/XP: этот параметр может быть также -7, -6, -5, -4, -3, 3, 4, 5, или 6.

Возвращаемые значения

Если функция завершается успешно, величина возвращаемого значения - не ноль.

Если функция завершается с ошибкой, величина возвращаемого значения - ноль. Чтобы получать дополнительные информацию об ошибке необходимо вызвать функцию GetLastError.

Каждый поток имеет базовый уровень приоритета, определяемый значением приоритета потока и классом приоритета его процесса. Система использует базовый уровень приоритета всех исполняемых потоков, чтобы установить, который поток получает следующий квант процессорного времени. Потокам устанавливается очередность обслуживания циклическим способом в каждом уровне приоритета, и только тогда, когда нет никаких выполняемых потоков на более высоком уровне, происходит диспетчеризация потоков на более низком уровне.

Функция SetThreadPriority дает возможность установки базового уровня приоритета потока относительно класса приоритета его процесса. Например, устанавливая THREAD_PRIORITY_HIGHEST при вызове SetThreadPriority для потока процесса IDLE_PRIORITY_CLASS базовый уровень приоритета потока устанавливается в значение 6.

Для процессов IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS и HIGH_PRIORITY_CLASS, система динамически повышает (форсирует) базовый уровень приоритета потока, когда происходят события, которые являются важными для потока. Процессы REALTIME_PRIORITY_CLASS не получают динамического форсирования.

Все потоки вначале запускаются как THREAD_PRIORITY_NORMAL. Используйте функции GetPriorityClassиSetPriorityClass, чтобы получать и устанавливать класс приоритета процесса. Используйте функциюGetThreadPriority, чтобы получить значение приоритета потока.

Используйте класс приоритета процесса, чтобы различать между прикладными программами те, которые являются критическими по времени исполнения и те, которые требуют нормальной или ниже нормальной очередности обслуживания. Используйте значения приоритета потока, чтобы различать относительные приоритеты задач процесса. Например, поток, который обрабатывает ввод данных для окна, может иметь более высокий уровень приоритета, чем поток, который выполняет интенсивные вычисления для ЦПУ.

При управлении приоритетами, будьте очень осторожными, чтобы гарантировать, что высокоприоритетный поток не поглотит все доступное процессорное время. Поток с базовым уровнем приоритета более чем 11 мешает нормальным операциям операционной системы. Использование REALTIME_PRIORITY_CLASS может стать причиной, что буферы системы ввода-вывода не станут сбрасывать на диск, зависание мыши, и так далее.