Разработка класса, осуществляющего асинхронную работу с файлами, страница 2

-  создание и уничтожение объекта связанного списка;

-  добавление элемента списка в конец с инициализацией его значения и без инициализации;

-  удаление произвольного элемента списка;

-  возврат количества элементов в списке.

Так как класс TSpisok не является специфичным для данного проекта, нет необходимости в его более подробном рассмотрении. Для получения информации о правилах его использования см. комментарии в распечатках файлов TSpisok.h.

4.2. Описание класса TTask

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

-  int option – тип операции, принимает значения:

0 -  открытие файла;

1 -  запись в файл;

2 -  закрытие файла;

3 -  чтение из файла;

4 -  синхронизируемая запись в файл;

5 -  синхронизируемое чтение из файла.

-  int length – размер буфера для операций чтения/записи, для открытия файла – длина имени файла, для закрытия файла – 0;

-  char *array – адрес начала буфера чтения/записи, имени файла (в зависимости от типа операции), равен NULL для закрытия файла.

Класс TTask содержит три метода: два вида конструкторов и деструктор.

Один из конструкторов не содержит параметров и является конструктором по умолчанию, второй – основной и служит для инициализации данных объекта класса  имеет следующий формат:

TTask::TTask(int opt,int len,char *source), где:

opt – код операции, совпадает со значениями option;

len – длина буфера;

source – адрес буфера-источника.

Этот конструктор приравнивает значения option и length значениям opt и len соответственно, в зависимости от opt либо выделяет память для нового буфера и копирует в него буфер source, либо приравнивает array значению source (для операций чтения).

Деструктор имеет стандартный вид и освобождает память, выделенную в конструкторе (если она была в нем выделена, в зависимости от типа операции).

4.3. Описание класса TAsyncFile

Класс TAsyncFile является основным в модуле асинхронного доступа к файлу. Данные, содержащиеся в этом классе, имеют тип доступа private, и поэтому недоступны для непосредственного изменения или чтения со стороны внешней программы. Описание их назначения и возможных значений содержится в комментариях в распечатке файла TAsyncFile.h.

Методы класса TAsyncFile:

void __fastcall TAsyncFile::Execute() – функция потока. Имеет тип доступа protected и недоступна для непосредственного вызова. Осуществляет все операции с файлом, информацию для которых извлекает из нулевого элемента очереди заданий tasks. После окончания очередной операции удаляет из очереди соответствующий этой операции нулевой элемент.

__fastcall TAsyncFile::TAsyncFile(char *filename,int opt) – конструктор класса. При его вызове необходимо указать имя файла и тип его открытия. Создает объект класса TAsyncFile, инициализирует переменные, помещает в очередь команду открытия файла и запускает функцию потока для выполнения этой команды.

__fastcall TAsyncFile::TAsyncFile() – конструктор класса. Создает объект класса, инициализирует переменные. После его применения необходим вызов метода CreateFile для открытия файла.

bool TAsyncFile::CreateFile(char *filename,int opt) – метод класса, предназначенный для открытия файла после вызова конструктора TAsyncFile(). Добавляет команду открытия файла в очередь и запускает поток. Если команда открытия файла уже выполнялась, возвращает false, иначе true.

bool TAsyncFile::WriteFile(void *buf,int numb)

bool TAsyncFile::WriteSyncFile(void *buf,int numb)

bool TAsyncFile::ReadFile(void *buf,int numb)

bool TAsyncFile::ReadSyncFile(void *buf,int numb) – методы класса, осуществляющие добавление в очередь команд записи, синхронизируемой записи, чтения и синхронизируемого чтения соответственно. В качестве параметра в функции передаются указатель на буфер и длина этого буфера. Возвращают значения false, если произошла ошибка (файл не открыт, файл закрыт, ошибка записи/чтения, попытка записи в файл, открытый для чтения и наоборот); иначе возвращают true.