Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> setjmp/longjmp в Delphi Win32, goto ВНЕШНЯЯ_МЕТКА 
:(
    Опции темы
RTJ
Дата 19.11.2023, 06:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 2.3.2017

Репутация: нет
Всего: нет



Можно ли на Delphi для Win32 реализовать аналоги C-функций setjmp/longjmp?

Код

type
   TJumpRec = record
      Address : Pointer;  { Адрес перехода, выполняемого LongJump. }
      ДРУГИЕ ДАННЫЕ, СОХРАНЯЕМОГО КОНТЕКСТА
   end;
var
   JumpRec : TJumpRes;

procedure GetData;
...
...
...
function GetByte( var B : Byte ) : Boolean;  { TRUE - байт получен, FALSE - данные ЗАКОНЧИЛИСЬ (ОШИБОК ВВОДА-ВЫВОДА [U]НЕ БЫЛО[/U]). }
begin
    ...
   { Нормальная ситуация - байт получен. }
   B := ...
   Result := TRUE;
   ...
   { Нормальная ситуация - байт НЕ получен. (Например, достигнут конец файла или файл пустой.) }
    Result := FALSE;
   ...
   { Ненормальная ситуация - ОШИБКА ВВОДА-ВЫВОДА (например, при чтении из файла). }
   LongJump(JumpRec)  { goto JumpRec.Address }
end; { GetByte }
...
...
...
var
   B : Byte;
label
   LabelState0, ... , LabelStateN, LabelExitOK, LabelExitERROR;
begin  { GetData }
   ...
   ИНИЦИАЛИЗАЦИЯ
   в том числе и вызов
  SetJump(JumpRec,@LabelExitERROR);
   ...
LabelState0:
    if  GetByte(B) then
      ДЕЙСТВИЯ ПРИ ПОЛУЧЕНИИ БАЙТА ДАННЫХ В СОСТЯНИИ State0,
      которые заканчиваются возможным переходом в какое-либо другое состояние (State0..StateN)
      или завершением работы (переход на метку LabelExitOK или на метку LabelExitERROR).
   else
      ДЕЙСТВИЯ СРАЗУ ПОСЛЕ ОКОНЧАНИЯ ПОЛУЧЕНИЯ ДАННЫХ (с переходом на метку LabelExitOK или на метку LabelExitERROR).
   ...
   ...
   ...
LabelStateN:
    if  GetByte(B) then
      ДЕЙСТВИЯ ПРИ ПОЛУЧЕНИИ БАЙТА ДАННЫХ В СОСТЯНИИ StateN,
      которые заканчиваются возможным переходом в какое-либо другое состояние (State0..StateN)
      или завершением работы (переход на метку LabelExitOK или на метку LabelExitERROR).
   else
      ДЕЙСТВИЯ СРАЗУ ПОСЛЕ ОКОНЧАНИЯ ПОЛУЧЕНИЯ ДАННЫХ (с переходом на метку LabelExitOK или на метку LabelExitERROR).
   ...
LabelExitOK:  { Нормальное завершение работы GetData. }
   ...
LabelExitERROR:  { Ненормальное завершение работы GetData (с какой-либо ошибкой: ОШИБКОЙ ВВОДА-ВЫВОДА или ОШИБКОЙ ВО ВХОДНЫХ ДАННЫХ). }
   ...
end { GetData }

PM MAIL   Вверх
gesper
Дата 23.11.2023, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Так вот почему программы лагают!
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1035 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.