Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Установочные лекции (Амелин).doc
Скачиваний:
6
Добавлен:
21.08.2019
Размер:
1.31 Mб
Скачать

Void Writer() {

while (true) {

PrepareNextRecord(); // подготовка записи

P(EMPTY);

/* Уменьшить число свободных эл-в буфера, если они есть, в противном случае - ждать, пока освободятся */

P(b); // Вход в критическую секцию

AddToBuffer(); // Добавить запись в буфер

V(b); // Выход из критической секции

V(FULL); // Увеличить число занятых эл-в

}

}

// Код потребителя

Void Reader () {

while (true) {

P(FULL);

/* Уменьшить число занятых элементов буфера, если они есть, в противном случае ждать, пока они появятся */

P(b); // Вход в критическую секцию

GetFromBuffer(); // Взять запись из буфера

V(b); // Выход из критической секции

V(EMPTY); // Увеличить число свободных эл-в

ProcessRecord(); // Обработать запись

}

}

В приведенной программе две процедуры Writer() и Reader() работают параллельно, причем каждая из них осуществляет бесконечный цикл. В начале своего цикла писатель Writer() вырабатывает некоторую порцию информации. Этим занимается процедура PrepareNextRecord(), причем ее назначение может быть любым в зависимости от функциональности программы (например, данные могут быть получены по сети). Затем писатель пытается выполнить операцию P над семафором EMPTY. Ему удастся это сделать только в том случае, если значение семафора положительно. В противном случае процедура писателя блокируется до тех пор, пока писатель, работающий параллельно с ним, не увеличит данный семафор.

Если операцию P(EMPTY) проделать удалось (т.е. в буфере было свободное место для новой записи), писатель помещает сгенерированную им порцию информации в буфер, "защитившись" предварительно с помощью блокирующей переменной b (читатель и писатель не должны работать с буфером одновременно). После выхода из критической секции писатель увеличивает значение семафора FULL, показывая, что в буфере появился еще один готовый для обработки элемент. Если читатель в это время простаивал (т.е. FULL был равен нулю), это действие "разбудит" его.

Процедура читателя тоже представляет собой бесконечный цикл while и работает аналогично. Функция ProcessRecord обрабатывает взятую из буфера порцию информации в соответствии с назначением программы.

14. Запись в реестр Windows заданной информации

Реестр, или системный реестр – это база данных для хранения сведений о конфигурации компьютера и настроек операционной системы.

Реестр содержит данные, к которым Windows XP постоянно обращается во время загрузки, работы и ее завершения, а именно:

  • профили всех пользователей, то есть их настройки;

  • конфигурация оборудования, установленного в операционной системе;

  • данные об установленных программах и типах документов, создаваемых каждой программой;

  • свойства папок и значков программ;

  • данные об используемых портах.

Реестр имеет иерархическую древовидную структуру, состоящую из разделов, подразделов и ключей (параметров).

REG-файл - это текстовый файл с расширением REG, составленный в определенном формате.

Ниже приводится пример REG-файла, отключающего меню недавних документов.

Windows Registry Editor Version 5.00 ;Отключить меню недавних документов [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer] "NoRecentDocsMenu"=hex:01,00,00,00