Асинхронный режим в Windows.
Windows позволяет осуществить асинхронный режим ввода/вывода с использованием функций ReadFile и WriteFile или ReadFileEX и WriteFileEX. Первые две функции обеспечивают обмен данными как в обычном (синхронном) режиме, так и в асинхронном режиме. Вторые две функции специально предназначены для работы в асинхронном режиме. Для использования функций ReadFile и WriteFile в асинхронном режиме необходимо при открытии (создании) файла подготовить (заполнить) специальную структуру данных и передать ее адрес этим функциям. В случае вызова этих функций в асинхронном режиме процесс обмена данными только инициируется, а управление немедленно возвращается вызвавшему их блоку. Одним из параметров, передаваемым этим функциям, является количество участвующих в обмене с устройством байт, т. е., фактически размер буфера для обмена с файлом. Операционная система автоматически создает отдельную задачу, обеспечивающую ввод/вывод, а вызвавшая эти функции задача продолжит свое выполнение, не дожидаясь завершения обмена. В случае необходимости ожидания завершения операции обмена, этой, или другой задачей, следует пользоваться соответствующими средствами синхронизации. В качестве этих средств могут быть задействованы или функция WaitForSingleObject или функция GetOverLappedResult, которая обычно используется для проверки результата выполнения асинхронной файловой операции.
Порядок выполнения лабораторной работы.
Часть I
2.1.1 Для выполнения первой части данной лабораторной работы необходимо изучить правила обращения к функциям, перечисленным в пункте 1, и структуры данных, связанные с этими функциями.
2.1.2 Подготовить заранее некоторый файл (например, текстовый), над которым будут выполняться действия в ходе выполнения лабораторной работы.
2.1.3. Подготовить и отформатировать дискету с указанием метки тома;
2.1.4. Разработать приложение, которое реализует следующие функции:
- Получает полную информацию о выбранном файле. Файл выбирается из каталога с помощью стандартных диалоговых панелей;
- Изменяет атрибуты выбранного файла;
- Получает информацию о наличии дисковых устройств в системе;
- Получает информацию о дискете (см. п. 2.1.3);
- Изменяет метку тома на дискете (см. п. 2.1.3);
2.1.5. Изменяя с помощью разработанного приложения атрибуты выбранного файла, попытаться выполнить над ним различные действия стандартными средствами: текстовым редактором и т. п. Например: установить атрибут "только чтение" и попытаться его модифицировать. После каждого действия над файлом следить за изменением информации с помощью разработанного приложения.
Часть II
2.2.1. Для выполнения второй части лабораторной работы необходимо изучить правила обращения к функциям, перечисленным в пункте 2, и структуры данных, связанные с этими функциями.
2.2.2. Разработать приложение, которое реализует следующие функции:
- Создает на сменном магнитном диске некоторый текстовый файл;
- Заполняет его некоторыми (случайными) символами (не менее 1000 Кб) в обычном (синхронном) режиме;
- После закрытия файла запускает какую - либо вычислительную процедуру (например, из лабораторной работы №1) с большим количеством циклов и отображением хода ее выполнения;
- После его завершения выводит на терминал время, потребовавшееся для выполнения вышеперечисленных действий;
- Уничтожает ранее созданный файл;
- Вновь создает его, но для заполнения в асинхронном режиме;
- Заполняет его некоторыми (случайными) символами (не менее 1000 Кб) в асинхронном режиме;
- Не дожидаясь завершения обмена, запускает вышеуказанную вычислительную процедуру;
- После окончания операции обмена выводит на терминал соответствующее сообщение и время, затраченное на эту операцию;
- После окончания вычислительной процедуры выводит на терминал соответствующее сообщение и время, затраченное на ее выполнения;
- После завершения всех действий выводит на терминал время, затраченное на их выполнение.
Перечисленные пункты необходимо выполнить, задавая различные размеры буфера обмена: 512, 1024, 2048 и 4096 байт.
Содержание отчета.
Отчет по лабораторной работе должен содержать описания изученных структур данных, листинг программы в части обращения к этим структурам и краткие выводы по проделанной работе, результаты замеров затраченного времени для различных размеров буферов и краткие выводы по проделанной работе.