![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Самовольное возвращение в функцию |
|
Delphi - [решено] Самовольное возвращение в функцию
|
Пользователь Сообщения: 97 |
Есть функция которая делает некоторые действия (какие, я думаю, неважно). Один из передаваемых ей параметров отвечает за прерывание её выполнения, т.е. если в функцию подать значение panic:=true то она завершится при первой же возможности. Вызов функции происходит при нажатии кнопки "BTN" (назовем её так). Остановка задумана повторным нажатием на эту же кнопку, т.е. при повторном нажатии вызывается эта же функция, но с параметром panic:=true.
Чудо заключается в следующем. При попытке остановить выполнение функции (повторное нажатие "BTN"), функция получает сигнал остановки и прерывает свое выполнение, происходит выполнение оставшихся команд обработчика кнопки "BTN", после чего программа ВНЕЗАПНО возвращается в функцию, при чем, не в начало, а в какую-то определенную строку в середине, и продолжает её выполнение до победного конца. Даже не знаю какую часть кода показывать в этом случае. Весь код функции пересмотрен много раз и, даже, был заменен на тестовый цикл, но докопаться до сути глюка мне не удалось. Думаю здесь либо что то логическое либо я упустил что-то важное в delphi... |
|
------- Отправлено: 22:24, 29-12-2010 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать На сколько я понял из Вашего сообщения, то вы снова запускаете одну и ту же функцию, но с параметром true!Но, функция вызванная с параметром false, при повторном нажатии не примет в параметр true! вы просто создаете еще один экземпляр функции, и как я понимаю, обе они начинают работать!При этом функция, которую Вы запустили второй, по счету, закончит свою работу, т.к. true параметр, а первая продолжит работу - false!
|
------- Отправлено: 07:40, 30-12-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 97
|
Профиль | Отправить PM | Цитировать LilLoco, Спасибо! Я как раз начал доходить до чего-то подобного. А как же выйти из функции именно по желанию пользователя, т.е. по нажатию чего-нибудь?!
|
------- Отправлено: 07:43, 30-12-2010 | #3 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Ну как варианты(не проверял
![]() Сделать через глобальную переменную, по Вашему примеру : panic - объявляем глобально!Из параметров убрать ее!Запускать функцию, и во время работе задать panic значение true! и как только функция дойдет до места, где идет проверка, она выйдет! Так же можно сделать в отдельно потоке, например! И просто по нажатию клавиши завершать поток! |
------- Отправлено: 07:55, 30-12-2010 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Professor_J.C.:
![]() |
||
------- Отправлено: 23:47, 30-12-2010 | #5 |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать есть куча "законных" способов сделать "неожиданный" переход:
|
Отправлено: 23:43, 02-01-2011 | #6 |
Пользователь Сообщения: 97
|
Профиль | Отправить PM | Цитировать Спасибо всем за советы. Проблему решил.
|
------- Отправлено: 09:06, 03-01-2011 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Как отложить/отключить перезагрузку после установки обновлений 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 |
|