Delphi - [решено] Самовольное возвращение в функцию

Ответить
Аватара пользователя
Professor_J.C.

Delphi - [решено] Самовольное возвращение в функцию

Сообщение Professor_J.C. »

Есть функция которая делает некоторые действия (какие, я думаю, неважно). Один из передаваемых ей параметров отвечает за прерывание её выполнения, т.е. если в функцию подать значение panic:=true то она завершится при первой же возможности. Вызов функции происходит при нажатии кнопки "BTN" (назовем её так). Остановка задумана повторным нажатием на эту же кнопку, т.е. при повторном нажатии вызывается эта же функция, но с параметром panic:=true.

Чудо заключается в следующем. При попытке остановить выполнение функции (повторное нажатие "BTN"), функция получает сигнал остановки и прерывает свое выполнение, происходит выполнение оставшихся команд обработчика кнопки "BTN", после чего программа ВНЕЗАПНО возвращается в функцию, при чем, не в начало, а в какую-то определенную строку в середине, и продолжает её выполнение до победного конца. Даже не знаю какую часть кода показывать в этом случае.



Весь код функции пересмотрен много раз и, даже, был заменен на тестовый цикл, но докопаться до сути глюка мне не удалось.

Думаю здесь либо что то логическое либо я упустил что-то важное в delphi...
Аватара пользователя
LilLoco

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение LilLoco »

На сколько я понял из Вашего сообщения, то вы снова запускаете одну и ту же функцию, но с параметром true!Но, функция вызванная с параметром false, при повторном нажатии не примет в параметр true! вы просто создаете еще один экземпляр функции, и как я понимаю, обе они начинают работать!При этом функция, которую Вы запустили второй, по счету, закончит свою работу, т.к. true параметр, а первая продолжит работу - false!
Аватара пользователя
Professor_J.C.

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение Professor_J.C. »

LilLoco, Спасибо! Я как раз начал доходить до чего-то подобного. А как же выйти из функции именно по желанию пользователя, т.е. по нажатию чего-нибудь?!
Аватара пользователя
LilLoco

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение LilLoco »

Ну как варианты(не проверял Изображение ) :

Сделать через глобальную переменную, по Вашему примеру : panic - объявляем глобально!Из параметров убрать ее!Запускать функцию, и во время работе задать panic значение true! и как только функция дойдет до места, где идет проверка, она выйдет!

Так же можно сделать в отдельно потоке, например! И просто по нажатию клавиши завершать поток!
Аватара пользователя
Drongo

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение Drongo »

Цитата Professor_J.C.:



Весь код функции пересмотрен много раз и, даже, был заменен на тестовый цикл, но докопаться до сути глюка мне не удалось.

Думаю здесь либо что то логическое либо я упустил что-то важное в delphi...
Delphi - [решено] Самовольное возвращение в функцию




Где этот тестовый цикл? Изображение
Аватара пользователя
pva

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение pva »

есть куча "законных" способов сделать "неожиданный" переход:прыжок (ключевые слова goto, break)вызов/обработка исключениявозврат из функциипоэтому для разбирательства код имеет значение. Напиши кусок кода между тем местом, куда программа всегда попадает и тем местом, где ты поставил нужный тебе брейк-поинт
Аватара пользователя
Professor_J.C.

Re: Delphi - [решено] Самовольное возвращение в функцию

Сообщение Professor_J.C. »

Спасибо всем за советы. Проблему решил.
Ответить

Вернуться в «Программирование и базы данных»