Документация по Clarion

       

QUEUE (описывает QUEUE-структуру)


метка QUEUE[,PRE]
метка field[,NAME()]

PRE Задает префикс структуры.
field Описание данных. Общий размер описанных данных может быть до 65,000 байт.

QUEUE описывает очередь в памяти. Очередь (QUEUE) - это двусвязный список, каждый элемент имеет ссылку на предыдущий и последующий элементы. Метка QUEUE-структуры используется в операторах и функциях, работающих с очередями. При использовании в операторах присваивания, QUEUE рассматривается как данное типа GROUP.
Очередь можно представить как "файл в памяти". Под описанную очередь выделяется буфер. При добавлении элемента в очередь, под него динамически выделяется память, и данные копируются из буфера в эту область памяти. При удалении элемента, выделенная под него память освобождается. В очереди может быть максимум 65,535 элементов.
Очереди могут использовать виртуальную память, если таковая имеется. Это позволяет, теоретически, отвести под очереди до 42 мегов памяти. Под виртуальную память могут быть выделены EMS, XMS или место на диске. Она может быть разрешена или запрещена во время загрузки. Виртуальная память задается переменной окружения CLAVM. Если виртуальная память недоступна, то очередь хранится в стандартной памяти (нижние 640К). Если в качестве виртуальной памяти был выбран только диск, то очередь, насколько это возможно, хранится в стандартной памяти и в случае переполнения частично сбрасывается на диск. Если виртуальная память настроена на EMS/XMS, то очередь сначала будет вестись в EMS/XMS. Затем, если EMS/XMS не хватает, в стандартной (все это в пределах виртуальной памяти), затем снова в EMS/XMS но уже до исчерпания EMS/XMS, и затем уже будет сбрасываться на диск (если это разрешено).
Память, отводимая под каждый элемент очереди, равна суммарному размеру полей элемента, плюс еще 28 байт (на системные данные и указатели), округленных с избытком до ближайшего числа кратного 16. Например: элемент состоит из двух полей: типа LONG и типа SHORT (всего 6 байт), и занимает 48 байт (6+26 и округляем до 48). Округление выполняется потому, что память выделяется 16-и байтными "параграфами". Существует, также, небольшой "излишек" памяти, выделяемый системой под вновь создающуюся очередь, который освобождается только оператором FREE.
Пример:
NameQue QUEUE,PRE(Nam) !Описываем очередь
Name STRING(20)
Zip DECIMAL(5,0),NAME('SortField')
. !Конец описания
См. также: , , , Приложение C



Содержание раздела