Потоки

Механизм потоков

Потоком называется обобщенный объект для реализации ввода-вывода данных. На фундаментальном уровне можно рассматривать потоки как абстрактные файлы. В своей основе файл представляет собой последовательное устройство ввода-вывода: его можно записывать и считывать из него. Кроме этого, поток - это полиморфическое устройство последовательного ввода-вывода, то есть оно ведет себя как последовательный файл, но вы можете считывать и записывать в него различные типы данных в каждый момент времени.

Потоки (как и файлы ) можно просматривать также, как устройства ввода-вывода произвольного доступа, искать определенное место в файле, считывать данные в этой точке или записывать данные в эту точку, возвращать позицию указателя файла и так далее.

Механизм потоков поддерживается набором специальных функцийStream_functions. Функции обеспечивают гибкие и эффективные методы для обработки данных различных форматов и реализуют возможность расширения для обработки типов, определенных пользователем.


Открытие потока

Для создания потока используется функция CreateStream()CreateStream. Функция возвращает дескриптор потока, с помощью которого к нему осуществляется в дальнейшем доступ. Текущая позиция потока устанавливается на начало. Перечень открытых потоков можно просмотреть в диалоговом окне Информация (системное меню - Вид - Информация). Если поток открывается на чтение, то он имеет определенный размер данных, которых можно из него прочитать. Например, если поток открыт из файла, его размер равен размеру файла. При записи размер потока обычно ограничивается размером свободного пространства на жестком диске.


Закрытие потока

Для закрытия потока используется функция CloseStream()CloseStream . Все открытые потоки закрываются при нажатии кнопки Стоп (панель инструментов УправлениеToolbar_Control). Дескриптор, связанный с потоком, после этого недействителен.


Состояние потока

Каждый поток имеет связанное с ним состояние, состоящее из нескольких элементов.

 Размер потока. Определяет размер данных, находящихся в потоке (в байтах). Получить значение размера можно с помощью функции GetSize()GetSize.

 Текущая позиция. Увеличивается после операций чтения/записи. Получить значение текущей позиции можно с помощью функции GetPos()GetPos. Установить произвольно новую позицию - функция Seek()Seek.

 Ширина потока. Имеет значение при чтении/записи в поток чисел. Определяет размер чисел в байтах (см. Константыwidth_constans), считываемых или записываемых в поток. По умолчанию устанавливается ширина, соответствующая числам с плавающей запятой размером 8 байт. Установить новое значение можно с помощью функции SetWidth()SetWidth.

 Флаги. Имеется два флага, сигнализирующих о его состоянии - конец потока, устанавливается при достижении позиции конца потока и ошибка, устанавливается при ошибке записи в поток и некоторых других случаях. Проверить флаги можно с помощью функций Eof()Eof и StreamStatus()StreamStatus.


Чтение данных из потока

Чтение возможно из потока, открытого на чтение, и осуществляется с помощью функций Read()Read - для чисел, ReadLn()Readln и GetLine()GetLine - для строк. В зависимости от размера данных текущая позиция в потоке после каждого считывания увеличивается. При попытке считывания из потока после выхода позиции на конец потока устанавливается специальный флаг (можно проверить функцией Eof()Eof).


Запись данных в поток

Запись данных возможна для потока, открытого на запись, и осуществляется с помощью функций Write()Write - для чисел, WriteLn()Writeln - для строк. В зависимости от размера данных текущая позиция в потоке после каждой записи увеличивается. При попытке записи в потока после окончания свободного пространства на диске устанавливается специальный флаг (можно проверить функцией StreamStatus()StreamStatus).


Файловые потоки (FILE)

Основное назначение потоков - чтение и запись данных из файлов. При открытии потока указывается тип потока FILE и имя файла. Размер потока равен размеру файла. Если идет запись в файл, то все записанные данные становятся действительными только после закрытия потока.


Потоки в памяти (MEMORY)

Открытие потока в памяти. Эти потоки используются как временные и удаляются после закрытия. Это самые быстродействующие потоки. Для сохранения содержимого потока следует скопировать его в файловый поток.


Потоки последовательного пота (SERIAL)

Открытие последовательного порта как потока. второй параметр - параметры соединения (MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]

,[RETRY=r]). Третий параметр - размер очереди. По умолчанию 1024 байта.


См.  Основные термины и определенияTermins

Created with the Personal Edition of HelpNDoc: Qt Help documentation made easy