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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2017, 12:41   #31
Shahimat
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не знаю возможно ли это хоть теоретически в Дельфи, но может перед такими сложными вариантами стоит проверить производительность с исключениями?) Или с проверкой в первой процедуре. Может и не придется дальше париться.
Алекс, я решил все же проверить вариант с исключениями ради интереса.
Так вот, по моим подсчетам в случае использования исключений типа try - except скорость падает примерно в 10000 раз...(
Shahimat вне форума Ответить с цитированием
Старый 04.08.2017, 12:50   #32
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Проверяли в релиз сборке с оптимизациями?
А возвращаемое значение вместо исключений?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.08.2017, 13:02   #33
Shahimat
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Проверяли в релиз сборке с оптимизациями?
А возвращаемое значение вместо исключений?
В конечной сборке рассматривал результат, результат никакой исключение не возвращает, он остается в указателе на переменную, исключение только лишь отрубает блок с циклом, примерно так:

Код:
Procedure Some2;
begin
 try
  while True do
  begin
   ...
   Some1;
   ...
  end;
 except
  Exit;
 end;
end;

Procedure Some1;
begin
 Abort;
end;
Shahimat вне форума Ответить с цитированием
Старый 04.08.2017, 13:06   #34
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Причем тут исключение, просто if добавьте в Some2.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.08.2017, 13:14   #35
Shahimat
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Причем тут исключение, просто if сделайте в Some2.
Так весь вопрос в том и был, как без if обойтись... вообщем этот вариант не подходит)
Изначально у меня и был if в таком духе:

Код:
...
 var NextCycle: ^Boolean;
...
 NextCycle := @TrueValue;
...

Procedure some2;
begin
 While NextCycle^ do
 begin
  ...
  Some1;
  ...
 end;
end;

Procedure Some1;
begin
  NextCycle := @FalseValue;
end;
Просто скорость можно ЗНАЧИТЕЛЬНО поднять, если перейти к такой схеме:

Код:
Procedure some2;
Label
 BACK;
begin
 BACK:
  ...
  Some1;
  ...
 goto BACK;
end;

Procedure Some1;
begin
  TerminateProcedure(Some2); //Вот надо понять как это сделать...
end;
Shahimat вне форума Ответить с цитированием
Старый 04.08.2017, 14:36   #36
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Откуда вы знаете, что она поднимется если вы не пробовали? Это невозможно так, как вы хотите, все существующие варианты уже перечислены.

Для goto что мешает убрать Some1 и делать все в Some2?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 04.08.2017, 14:43   #37
Shahimat
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Откуда вы знаете, что она поднимется если вы не пробовали? Это невозможно так, как вы хотите, все существующие варианты уже перечислены.

Для goto что мешает убрать Some1 и делать все в Some2?
Скорость поднимется, т.к. проверка на условие будет отсутствовать.
Some1 - ссылка на произвольную процедуру, как пример, процедура завершения работы цикла. Или некая расчетная процедура.
Shahimat вне форума Ответить с цитированием
Старый 04.08.2017, 15:20   #38
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Из-за одного if-а все дебаты? В остальном прога без разветвлений?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.08.2017, 15:49   #39
Shahimat
Пользователь
 
Регистрация: 05.12.2015
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Из-за одного if-а все дебаты? В остальном прога без разветвлений?
Прога-то вся с разветвлениями) меня только эта часть кода интересует, действительно, как можно избавиться от if-а, используя спец.процедуру завершения другой процедуры, или смещения указателя на конец процедуры, или
использования неких глобальных меток (что не получилось) или еще варианты без реинжениринга самого экзешника, чтобы в рамках одного проекта это сделать. Может у кого и возникала такая проблема, надеюсь таковые есть, отпишутся как решили... На форумах видел один раз подобный вопрос, только ответа толком никто не дал.
Еще вопрос, уважаемые модераторы, вы случайно не в курсе, есть-ли среди ваших знакомых, ну или просто знакомые, кто реально занимается подобными или близкими к таковой задачами, у которых можно проконсультироваться? Если вопрос будет платный, то сочтусь.
Shahimat вне форума Ответить с цитированием
Старый 04.08.2017, 15:55   #40
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Да не придумало пока человечество ничего сильно отличающееся от перечисленного.
... и вряд ли сильно думает, задача очень специфичная.


Цитата:
Сообщение от Shahimat Посмотреть сообщение
Some1 - ссылка на произвольную процедуру
так проверили б производительность своего goto с кодом одной процедуры (ну или с копипастом и т.п. нескольких если с одной не работает), может окажется, что таки не стоит париться.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 04.08.2017 в 15:57.
Alex11223 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача одной процедуры другой в качестве входящего параметра ProRockX Общие вопросы Delphi 2 02.10.2015 11:32
Не могу найти контрол из одной процедуры в другой ChoKavo C# (си шарп) 1 18.10.2014 13:34
Использование имени процедуры в качестве параметра другой процедуры Alexey355 Помощь студентам 1 23.04.2011 13:59
Вызов одной процедуры из другой artemavd Общие вопросы Delphi 11 26.11.2010 17:37
Ошибка вызова одной процедуры в другой! $T@LKER БД в Delphi 4 28.04.2010 19:50