Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 930

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте!
Есть проект, в нем 2 формы, на каждой форме есть по 1 таймеру, которые запускают свои процедуры. Модулей потоков нет.
Вопрос:
- Таймеры запускают процедуры в одном потоке?
- Что будет если по времени выполнения эти процедуры пересекаются?

ymb62 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ymb62 (статус: Посетитель)
Вопрос отправлен: 20 сентября 2007, 11:15
Состояние вопроса: решён, ответов: 3.

Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович

Здравствуйте, ymb62!
1)Да. Процедуры запускаются в одном потоке.
2)Если запустилась одна процедура и она никак не возвращает управление главной программе, то вторая попросту не запустится вовремя, потому что до проверки состояния второго таймера просто не дойдёт (до завершения процедуры). Если обе процедуры время от времени каким-то образом передают управление главной программе (например Application.ProcessMessages) то они будут работать одновременно и если обе доступаются к одним и тем же глобальным данным то будут менять их в произвольном порядке.

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 20 сентября 2007, 11:24
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Вадим К

Здравствуйте, ymb62!
Дополню ответ. Да процедуры будут запускаться в одном потоке, в главном. Мало того, если процедуры будут долгие (тоесть процедура будет по времени выполнятся дольше, чем тик таймера, то количество раз,которые будет выполнена процедура будет меньше - Windows имеет полное право игнорировать посылку сообщений WM_PAINT (команда приложению перерисовать себя) и WM_TIMER (Сработал таймер), если очередь сообщений загружена.
Поэтому, если вы посмтавите на форму ещё один секндный таймер и впишете в обработчик код вида t:=t+1; для подсчёта секунд, то он будет отставать.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 20 сентября 2007, 11:38
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Feniks

Здравствуйте, ymb62!
Еще маленькое дополнение.
Каждый Таймер перед запуском регистрируется в системе под уникальным ID. Так что работают сами по себе, параллельно, но в одном потоке с приложением.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 20 сентября 2007, 11:53


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 20 сентября 2007, 11:50; участников в обсуждении: 1.
Feniks

Feniks (статус: Бакалавр), 20 сентября 2007, 11:50 [#1]:

Еще маленькое дополнение.
Каждый Таймер перед запуском регистрируется в системе под уникальным ID. Так что работают сами по себе, параллельно, но в одном потоке с приложением.

31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:54
Выполнено за 0.03 сек.