Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2008, 19:37   #1
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
Подмигивание AssignCrt

Можете объяснить как работает эта процедура. я понял только что она работает на подобии assign только связывает файловую переменную с экраном) т.е. получается все что мы записываем в файловую переменную , записывается(выводится) на экран, а вот как прочесть эту файловую переменну? и зачем вообще нужно связывать с экраном а не с именем файла?
Викдон вне форума Ответить с цитированием
Старый 21.11.2008, 20:51   #2
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
Процедура AssignCRT.

Связывает текстовую файловую переменную F с экраном с помощью непосредственного обращения к видеопамяти (т.е. к памяти, используемой адаптером для создания изображения на экране). В результате вывод в такой текстовый файл осуществляется значительно (в 3...5 раз) быстрее, чем если бы этот файл был связан с экраном стандартной процедурой Assign. Заголовок процедуры:

Procedure AssignCRT(F: Text);

В следующей программе измеряется скорость вывода на экран с помощью стандартной файловой процедуры и с помощью непосредственного обращения к видеопамяти. Вначале файловая переменная F связывается «медленной» процедурой Assign со стандартным устройством CON (т.е. с экраном) и подсчитывается количество N1 циклов вывода некоторого текста за 5*55 = 275 миллисекунд системных часов. Затем файловая переменная связывается с экраном с помощью процедуры быстрого доступа AssignCRT и точно так же подсчитывается количество N2 циклов вывода. В конце программы счетчики N1 и N2 выводятся на экран.

Замечу, что показания системных часов хранятся в оперативной памяти компьютера в виде четырехбайтного слова по адресу [$0040:$006С] и наращиваются на единицу каждые 55 миллисекунд.
Код:
Uses CRT;
var
  F: Text;
  t: LongInt;{Начало отсчета времени}
  N1,N2: Word;{Счетчики вывода}
const
  txt = ' Text';
begin
  {----- Стандартный вывод в файл -----}
  Assign(F,'CON');
  Rewrite(F);
  N1 := 0;{Готовим счетчик вывода}
  ClrScr;{Очищаем экран}
  {Запоминаем начальный момент:}
  t := MemL[$0040:$006C];
  {Ждем начала нового 55-мс интервала, чтобы исключить погрешность в определении времени:}
  while MemL[$0040:$006C]=t do;
  {Цикл вывода за 5 интервалов}
  while MemL[$0040:$006C]<t+6 do
  begin
    inc(N1) ;
    Write(F,txt)
  end;
  Close(F);
  {----- Вывод с помощью быстрой процедуры прямого доступа к экрану - ----}
  AssignCRT(F);
  Rewrite(F);
  N2 := 0;
  ClrScr;
  t := MemL[$0040:$006C];
  while MemL[$0040:$006C]=t do;
  while MemL[$0040:$006C]<t+6 do
  begin
    inc(N2);
    Write(F,txt)
  end ;
  Close(F);
  {Печатаем результат}
  ClrScr;
  WriteLn(N1,N2:10)
end.
Следует учесть, что вывод на экран обычным образом - без использования файловой переменной (например, оператором Write (txt)) также осуществляется с помощью непосредственного доступа к видеопамяти, поэтому ценность процедуры AssignCRT весьма сомнительна. Прямой доступ к видеопамяти регулируется глобальной логической переменной DirectVideo модуля CRT: если эта переменная имеет значение True, доступ разрешен, если False - доступ к экрану осуществляется с помощью относительно медленных средств операционной системы MS-DOS. По умолчанию переменная DirectVideo имеет значение True.
..........
_Dmitry вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц