Руководство по языку B.Pascal 7



Инициализация администратора оверлеев - часть 2


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

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

Нужно также помнить о том, что процедура OvrSetBuf увеличи- вает размер оверлейного буфера за счет уменьшения размера динами- чески распределяемой области памяти. Таким образом, динамически распределяемая область должна быть пустой, иначе процедура OvrSetBuf не окажет никакого действия. Если вы используете модуль Graph, убедитесь в том, что вы обращаетесь к процедуре OvrSetBuf перед вызовом процедуры InitGraph, которая выделяет память в ди- намически распределяемой области.

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

const OvrMaxSize = 80000; var OvrName: string[79]; Size: Longint; begin OvrName:='EDITOR.OVR'; repeat OvrInit(OvrName); if OvrResult=ovrNotFound then begin WriteLn('Оверлейный файл не найден'); WriteLn('Введите правильное имя оверлейного файла:'); ReadLn(OvrName); end; until OvrResult<>ovrNotFound; if OvrResult<>ovrOk then begin WriteLn('Ошибка администратора оверлеев.') Halt(1); end; OvrInEMS; if OvrResult<>OvrOk then begin case OvrResult of ovrIOError: Write('Ошибка ввода-вывода', ' оверлейного файла'); ovrNoEMSDriver: Write('Драйвер EMS не', ' установлен'); ovrNoEMSMemory: Write('Не хватает расширенной', ' памяти'); end; Write('. Нажмите клавишу Enter...'); ReadLn; end; OvrSetBuf(OvrMaxSize); end;




- Начало -  - Назад -  - Вперед -