|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.09.2014, 17:02 | #1 |
Регистрация: 09.06.2012
Сообщений: 8
|
Таймеры и формы. Нужна помощь.
Добрый вечер.
Есть главная форма 1, на которой висит таймер. Таймер срабатывает раз в 2 минуты. На главной форме есть меню, одна из кнопок меню вызывает форму 2 модально. Дело в том что когда вызвана вторая форма и срабатывает таймер на основной форме, то вторая форма не закрывается пока не отработает таймер. В таймере крутится долгий цикл. Вторая форма закрывается методом - modalResult:=MrCLose; |
16.09.2014, 17:59 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Так, а если немодально вызывать?
И кстати в чем смысл всего этого? Какая задача?
I'm learning to live...
|
16.09.2014, 18:39 | #3 |
Регистрация: 09.06.2012
Сообщений: 8
|
Ответ
Надо модально, дело в том что программа довольно большая с большим количеством форм. На главной форме таймер который делает синхронизацию из БД, но нужно чтобы таймер делал синхронизацию и формы закрывались без зависаний.
В таймере цикл бежит по табицам загружает данный через IdHTTP.GET IdHTTP в купе с антифризом. В цикле Application.ProcessMessages, т.е. пока молотит цикл в таймере на второй форме все кликается-работает. НО когда пытаюсь закрыть форму кнопка не реагирует. Цель такая чтобы формы закрывались при работе таймера. |
16.09.2014, 20:43 | #4 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,877
|
Код:
|
16.09.2014, 23:03 | #5 | |
Форумчанин
Регистрация: 21.04.2014
Сообщений: 115
|
Цитата:
А дело в том, что ShowModal "удерживает" строчку на которой находится, дальнейший код не будет выполнен пока окно не умрёт. Это можно сделать только надстроив над основным циклом приложения свой собственный (внутри ShowModal немедленно обнаружится искомый repeat until). Это как минимум гарантирует блокирование самого таймера, если окно будет открыто вовремя исполнения Application.ProcessMessages. Соответственно и рекомендация от неуча типа меня будет одна: перепроектировать проект на многопоточный вариант, выбросить таймер в свой поток, чтобы он не мешал жить остальной логике. |
|
17.09.2014, 01:37 | #6 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,877
|
|
17.09.2014, 02:03 | #7 |
Форумчанин
Регистрация: 21.04.2014
Сообщений: 115
|
Каким бы образом не работал VCL, вам желательно (при правильном проектировании) получить гарантии, что внутри таймера вы будете находиться один раз и не допустите ни параллельного вызова, ни вложенного по стеку. В самом примитивном случае на входе таймера будет стоять взведённый булев флаг, а спустить его не даст блокировка ShowModal, которая запустит свой цикл сообщений.
PS: для меня абсолютная загадка как именно работает компонента таймера - кто его вызывает, на что он там подписан и т.п. Я могу жестоко заблуждаться =-) |
17.09.2014, 02:10 | #8 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,877
|
2 StriderX
Тут явно ТС о чём-то умалчивает или чего-то недоговаривает. Верю что просто по незнанию и неверной трактовке своего кода. Цитата:
Последний раз редактировалось northener; 17.09.2014 в 02:12. |
|
17.09.2014, 02:14 | #9 |
Форумчанин
Регистрация: 21.04.2014
Сообщений: 115
|
Да я не принижаю, то что мне надо было на практике - это или системы реального времени и rdtsc; или же системы с фиксированной частотой процессов\таймера, где мне хватает GetTickCount. Я действительно никогда не задавался вопросом - как работает дельфийский таймер и кто обязан гарантировать изоляцию его вызовов друг от друга. В зависимости от схемы работы таймера реально возможны любые сайд эффекты, но в то же время я не могу в голове обрисовать проблему автора - у меня нет примера как так сломать специально. Только предложение сделать приложение многопоточным =)
|
17.09.2014, 02:53 | #10 | |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,877
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Таймеры | tools | Qt и кроссплатформенное программирование С/С++ | 3 | 30.05.2010 23:12 |
Таймеры | Sergeu | Общие вопросы C/C++ | 2 | 25.03.2010 12:13 |
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) | Farridjan | Помощь студентам | 1 | 03.07.2009 12:24 |
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) | 5Paladin5 | Помощь студентам | 3 | 02.07.2009 09:12 |