1. Цель работы
Цель данной работы - расширить возможности по использованию многозадачности операционной системы Windows 95, а также ускорить работу приложений за счет одновременного выполнения операций с файлами и каких-либо других действий, необходимых в программе. Для этого необходимо создание модуля асинхронного доступа к файлу, в функции которого входит:
- создание потока, который будет осуществлять все операции с файлом;
- обеспечение интерфейса между этим потоком и основной программой;
- синхронизация процессов обмена данными, оповещение основной программы о текущем состоянии операций с файлами, выдача основной программе сообщений об ошибках.
2. Задание
Разработать класс, осуществляющий асинхронную работу с файлами и имеющий следующие функции:
- открытие файла с различными видами операций с ним (чтение/запись);
- запись в файл блока данных;
- чтение из файла блока данных;
- синхронизируемая запись в файл (команда включается в очередь заданий, но не выполняется до установки флага разрешения);
- синхронизируемое чтение из файла;
- закрытие файла;
- чтение и запись флага разрешения синхронизируемых операций;
- чтение текущего состояния операции.
Windows 95 является многозадачной операционной системой, что означает, что в ней могут одновременно выполняться несколько независимых потоков команд. Так как Windows 95 предназначена для работы на компьютере, содержащем один процессор, многозадачность реализуется на основе разделения времени между задачами с достаточно частым переключением между ними.
Обмен информацией между программой и файлами на внешних носителях информации в операционной системе Windows 95 осуществляется синхронно, то есть, если программе требуется осуществить запись или чтение данных с диска, она отправляет операционной системе запрос, используя функции WinAPI, которые производят запись либо чтение данных, возвращая управление программе по завершению всех операций. Так как внешние накопители относительно медленны, то большое количество процессорного времени теряется в циклах ожидания окончания процедуры чтения/записи накопителем. Особенно это актуально для дисководов гибких дисков и других медленных накопителей. Однако, если для работы с файлом создать отдельный поток, то основная программа сможет выполнять какие-либо действия во время ожидания. Эта возможность реализована в ядре операционной системы Windows NT, однако, в Windows 95 функции асинхронной работы с файлами отсутствуют, а вместо них стоят «заглушки». В связи с этим возникает необходимость разработки модуля, который позволит организовать асинхронную работу с файлами в среде Windows 95.
Основу такого модуля составляет функция потока, которая работает параллельно основной программе и непосредственно осуществляет все операции с файлом, а именно: открытие файла, запись, чтение данных, закрытие файла. Данные в эту функцию передаются через очередь заданий, организованную в виде связанного списка изменяющейся длины. Каждый элемент списка содержит данные: код операции, адрес буфера и его размер. Функция потока выбирает из очереди первое задание и приступает к его выполнению. После завершения операции функция потока удаляет из очереди первое задание и приступает к выполнению следующего. Если очередь пуста, производится останов потока.
Задания в очередь помещают функции интерфейса с основной программой. При вызове одной из этих функций задание добавляется в конец очереди. Если перед этим очередь была пуста, производится пуск функции потока. В случае невозможности выполнения команды (команда записи в файл, открытый для чтения и наоборот; файл не открыт, файл уже закрыт, произошла ошибка работы с файлом) функция не добавляет задание в очередь и возвращает вызывающей процедуре false.
Обратная связь между функцией потока и вызывающей программой осуществляется через переменную, содержащую текущее состояние функции потока и процесса обмена с файлом. Состояния могут быть следующими:
- все в порядке, очередная команда в процессе выполнения;
- произошла ошибка;
- завершены все заданные операции, очередь пуста, ожидание новых команд;
- файл закрыт;
- файл не открыт;
- ожидание начала синхронизируемой операции.
Возможны различные типы открытия файла: открытие уже существующего файла для чтения, открытие нового файла для записи (если файл уже существует, открытие невозможно); открытие файла для записи, даже если он существует (в этом случае файл будет перезаписан).
4. Описание программных модулей и функций
Модуль асинхронного доступа к файлу содержит три программных модуля:
- класс TSpisok – служит для организации связанного списка;
- класс TTask – содержит данные для выполнения одной операции с файлом;
- класс TAsyncFile – основной класс для асинхронного доступа к файлу, содержит функцию потока и все функции интерфейса с ней.
4.1. Описание класса TSpisok
Класс TSpisok предназначен для организации связанного списка из любых объектов. В данной работе он используется для организации динамически изменяющейся очереди заданий из объектов класса TTask. Функции класса TSpisok позволяют производить следующие операции:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.