![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 15.05.2009
Сообщений: 3
|
![]()
Помогите решить проблему.
Есть 2-е процедуры. К примеру по нажатию кнопки 1 запускается процедура 1. Процедура выполняется долго к примеру 10 секунд. Если на 5-й секунде нажатием кнопки 2 запустить процедуру 2, процедура 1 останавливается, выполняется процедура 2, после чего продолжает выполняться процедура 1. Что можно придумать, не перенося процедуры в потоки, чтобы при нажатии кнопки 2, процедура 1 доработала до конца и только после этого исполнилась процедура 2? Одним словом необходимо чтобы процедуры ваполнялись до конца в порядке их вызовов. Простейший пример ниже. Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]()
1.не использовать внутри этих процедур
application.processmessage; 2.при запуске процедуры блокировать возможность вызова других процедур buttonA.enable:=false; и разблокировать по окончании buttonA.enable:=true;
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 15.05.2009 в 19:49. |
![]() |
![]() |
![]() |
#3 | |
Регистрация: 15.05.2009
Сообщений: 3
|
![]() Цитата:
2. процедуры в реальной задаче запускаются 3-мя способами: Кнопка/Таймер/По факту коннекта сокета. Эти события нельзя блокировать, нужно просто выполнять процедуры последовательно и до конца. |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]()
ставить флаг занято
вести лог(очередь) запусков
программа — запись алгоритма на языке понятном транслятору
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 15.05.2009
Сообщений: 3
|
![]()
К примеру ставлю флаг занято на время выполнения процедуры 1.
В начале процедуры 2 циклически проверяю флаг, но пока я проверяю флаг в процедуре 2 процедура 1 не работает и соответственно обе процедуры виснут навсегда. Я уже пробовал эксперементировать и с Event и с WeitableTimer результат пока тот же. Вероятно действительно придется заводить очередь и выполнять запросы последовательно по очереди. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Последовательность | CrazyRabbit | Помощь студентам | 14 | 08.02.2009 17:22 |
Паскаль, последовательность | Кагбе_Прогер | Помощь студентам | 2 | 22.12.2008 13:11 |
Последовательность событий | MAcK | Общие вопросы Delphi | 2 | 20.11.2008 14:36 |
последовательность | pakusya | Помощь студентам | 1 | 17.10.2008 17:33 |
числовая последовательность | pelsh | Помощь студентам | 1 | 15.02.2008 03:20 |