Недавно добавленные исходники

•  Animation Loaders  699

•  DeLiKaTeS Tetris (Тетрис)  5 700

•  TDictionary Custom Sort  7 657

•  Fast Watermark Sources  7 348

•  3D Designer  10 555

•  Sik Screen Capture  7 874

•  Patch Maker  8 096

•  Айболит (remote control)  8 157

•  ListBox Drag & Drop  6 951

•  Доска для игры Реверси  100 173

•  Графические эффекты  8 220

•  Рисование по маске  7 613

•  Перетаскивание изображений  6 216

•  Canvas Drawing  6 583

•  Рисование Луны  6 509

•  Поворот изображения  5 684

•  Рисование стержней  4 606

•  Paint on Shape  3 302

•  Генератор кроссвордов  4 291

•  Головоломка Paletto  3 435

•  Теорема Монжа об окружностях  4 254

•  Пазл Numbrix  2 756

•  Заборы и коммивояжеры  3 660

•  Игра HIP  2 469

•  Игра Go (Го)  2 454

•  Симулятор лифта  2 861

•  Программа укладки плитки  2 297

•  Генератор лабиринта  3 021

•  Проверка числового ввода  2 523

•  HEX View  2 931

 
скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Синий экран при исключениях FPU в Win9X



Автор: Alexander Petruhiv

Условия возникновения бага - системная плата с VIA694/694T/KT133/KT133A, ОС Win95/98/Me. Под Win XP баг не проявляется.

Следующий код вызывает "синий экран" с исключением 0E. На нормально работающей машине просто напечатается 64К раз строка Trapped.

program extest;
{$APPTYPE CONSOLE}
uses SysUtils;
{$O-}
var
  i: integer;
  a, Res: Double;
begin
  a := 0;
  for i := 0 to 65535 do
  try
    Res := i / a;
  except
    writeln('Trapped');
  end;
end.

ТИПОВЫЕ РЕШЕНИЯ.
  1. Отключить сопроцессор. Панель управления->Свойства системы->Устройства->Системные устройства->Сопроцессор->Свойства->Настройка. Установить переключатель в положение Не использовать. При этом возможна некорректная работа других программ и устройств, например, принтеры HP Deskjet могут перестать печать в цвете.
  2. Замена материнской платы.
  3. Отключение генерации прерываний от FPU и выдача исключения вручную.
    program extest;
    {$APPTYPE CONSOLE}
    uses SysUtils;
    {$O-}
    
    // Функция проверки на бесконечность и нечисловое значение -
    // неоптимизирована, только для примера
    
    function InfNan(Value: double): double;
    begin
      if (FloatToStr(Value) = 'INF') or (FloatToStr(Value) = 'NAN') then
        raise EmathError.Create('');
      Result := Value;
    end;
    
    var
      i: integer;
      a, Res: Double;
    begin
      a := 0;
      Set8087CW($133F); // запретить прерывания от сопроцессора
      for i := 0 to 65535 do
      try
        Res := InfNan(i / a);
      except
        writeln('Trapped');
      end;
    end.
КОММЕНТАРИЙ:

Предложенный тест проходит так, как описано, на материнской плате с чипсетом VIA KT266 (CPU Athlon 1000): под Win98SE система трапается с синим экраном и исключением 0E, а под Win2000 сбоев не наблюдается. Поступали сообщения об аналогичной проблеме в связке Win98+K7/K6/K5. Данный материал свидетельствует о том, что и с процессорами Intel такое бывает (чипсеты VIA694/694T используются в материнских платах для Celeron и P3, а KT133/KT133A - для K7 Athlon и Duron).

Очевидно, список чипсетов может быть еще расширен. Одно общее обстоятельство сохраняется - ОС серии Win9X. Поэтому этот "камень" отнесен к категории СИСТЕМА, хотя, на первый взгляд, он просится в HARDWARE.

Как минимум, еще одно радикальное решение можно предложить - использовать Windows линии NT.





Похожие по теме исходники

Хранитель экрана Папины Дочки

Передача удаленного экрана по сети (Remote Screen)

Примеры работы с БД

Примеры оформления DBGrid

 

Пример использования DBGrid

База предприятий и менеджеров 0.99

Консольное DOS приложение

Работа с принтером

 

Локализация приложений




Copyright © 2004-2026 "Delphi Sources" by «SiteAnalyzer». Delphi World FAQ

Группа ВКонтакте