|
Вопрос # 930/ вопрос решён / |
|
Здравствуйте!
Есть проект, в нем 2 формы, на каждой форме есть по 1 таймеру, которые запускают свои процедуры. Модулей потоков нет.
Вопрос:
- Таймеры запускают процедуры в одном потоке?
- Что будет если по времени выполнения эти процедуры пересекаются?
 |
Вопрос задал: ymb62 (статус: Посетитель)
Вопрос отправлен: 20 сентября 2007, 11:15
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович
Здравствуйте, ymb62!
1)Да. Процедуры запускаются в одном потоке.
2)Если запустилась одна процедура и она никак не возвращает управление главной программе, то вторая попросту не запустится вовремя, потому что до проверки состояния второго таймера просто не дойдёт (до завершения процедуры). Если обе процедуры время от времени каким-то образом передают управление главной программе (например Application.ProcessMessages) то они будут работать одновременно и если обе доступаются к одним и тем же глобальным данным то будут менять их в произвольном порядке.
Ответ #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 (статус: Бакалавр), 20 сентября 2007, 11:50 [#1]:
Еще маленькое дополнение.
Каждый Таймер перед запуском регистрируется в системе под уникальным ID. Так что работают сами по себе, параллельно, но в одном потоке с приложением.
|
31 января 2011, 20:02: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|