Имя пользователя:
Пароль:
 | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Самовольное возвращение в функцию

Ответить
Настройки темы
Delphi - [решено] Самовольное возвращение в функцию

Аватара для Professor_J.C.

Пользователь


Сообщения: 97
Благодарности: 7


Конфигурация

Профиль | Отправить PM | Цитировать


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

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

-------
Главное качество любого интеллигентного человека это умение засунуть своё мнение в задницу... другому :)


Отправлено: 22:24, 29-12-2010

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:40, 30-12-2010 | #2



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

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


Аватара для Professor_J.C.

Пользователь


Сообщения: 97
Благодарности: 7

Профиль | Отправить PM | Цитировать


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

-------
Главное качество любого интеллигентного человека это умение засунуть своё мнение в задницу... другому :)


Отправлено: 07:43, 30-12-2010 | #3


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}

Это сообщение посчитали полезным следующие участники:

Отправлено: 07:55, 30-12-2010 | #4


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата Professor_J.C.:
Весь код функции пересмотрен много раз и, даже, был заменен на тестовый цикл, но докопаться до сути глюка мне не удалось.
Думаю здесь либо что то логическое либо я упустил что-то важное в delphi... »
Где этот тестовый цикл?

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 23:47, 30-12-2010 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:43, 02-01-2011 | #6


Аватара для Professor_J.C.

Пользователь


Сообщения: 97
Благодарности: 7

Профиль | Отправить PM | Цитировать


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

-------
Главное качество любого интеллигентного человека это умение засунуть своё мнение в задницу... другому :)


Отправлено: 09:06, 03-01-2011 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Самовольное возвращение в функцию

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как отложить/отключить перезагрузку после установки обновлений Windows 7 Marek78 Microsoft Windows 7 60 06-02-2014 15:34
Возвращение Outlook Express Craager Автоматическая установка приложений 2 16-07-2009 10:55
Петька 3: Возвращение Аляски bev-78 Игры 2 12-12-2008 12:37
Самовольное отключение служб (???) Pixer Microsoft Windows NT/2000/2003 12 27-08-2007 14:25




 
Переход