Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Ошибочны ли мои опасения? [D7, XP]


gosha73 ©   (2007-02-03 20:44:00) 

Здравствуйте уважаемые.
Подскажите мне пожалуйста ответ на вопрос:
Пишу программу, которая также подгружает дллку. В дллке есть таймер и время от времени он срабатывает и вызывает одну из процедур интерфейса в основной программе. И вот рассматриваю такой момент. Сработал тамер в дллке и соответсвенно длл-ка вызвала функцию в основной программе. А основная программа в этот момент выполняет какой-либо цикл в одной из своих процедур. Хочется понять, что произойдет. Программа отреагирует на событие только закончив весь цикл, или произойдет какая-либо ошибка? Или же это событие встанет в очередь, т.е. если я правильно понимаю в стёке окажется и будет ждать обработки? Это только мое представление, оно скорее всего ошибочное, но хочу удостоверится спросив у вас.
Спасибо друзья.


Anatoly Podgoretsky   (2007-02-04 11:21:00) [1]


> Меня смущало, что мало ли, у exe и dll разные менеджеры
> памяти и свои TApplication, это меня тоже смущало.

А так оно и есть, разные, да еще и RTTI свое


Anatoly Podgoretsky   (2007-02-04 11:19:00) [2]

Не хочешь сам почитать?


Loginov Dmitry   (2007-02-04 09:58:00) [3]

> Какой ещё "интервал простоя"? Ты куда-то не об том молвишь.


Выражаюсь тупым языком для простоты понимания :))

Вообще наверно так получается: система кидает в цикл обработки событие о тике таймера только когда основной поток начинает простаивать.

А вообще хэлп читайте! :)))


Германн   (2007-02-04 01:49:00) [4]


> Loginov Dmitry ©   (04.02.07 00:44) [9]
>
> > у него другая задача выдать управление по окончанию интервала
>
>
> по окончанию интервала простоя.
>

Какой ещё "интервал простоя"? Ты куда-то не об том молвишь. :)


gosha73   (2007-02-04 01:44:00) [5]

Да ребята, спасибо, врубился. У меня же действительно однопоточная программа. Меня смущало, что мало ли, у exe и dll разные менеджеры памяти и свои TApplication, это меня тоже смущало.


Loginov Dmitry   (2007-02-04 00:44:00) [6]

> у него другая задача выдать управление по окончанию интервала


по окончанию интервала простоя.


Anatoly Podgoretsky   (2007-02-04 00:38:00) [7]

> Loginov Dmitry  (04.02.2007 00:30:07)  [7]

Таймер никаких простоев не считает, у него другая задача выдать управление по окончанию интервала, хоть компьютерный таймер, хоть кухонный.


Loginov Dmitry   (2007-02-04 00:30:00) [8]

> или произойдет какая-либо ошибка?


А с чего ей происходить? TTimer который в dll-ке работает в основном потоке. Пока не отработает одна процедура, другая работать не начнет. Кстати к сведению: TTimer отсчитывает время простоя основного потока. Как только время простоя оказалось равным, к примеру одной секунды, произойдет вызов обработчика OnTimer.


gosha73   (2007-02-03 21:41:00) [9]

Хм, ну да, в принципе логично.
Большое спасибо.


Zeqfreed   (2007-02-03 21:36:00) [10]

Скорее всего ничего не меняется. В любом случае, процедура вызывается в обработчике сообщений, которые ставятся в очередь.


gosha73   (2007-02-03 21:23:00) [11]

А если TTimer не принадлежит форме? У него owner = nil при его создании в длл.


Zeqfreed   (2007-02-03 21:18:00) [12]

Если TTimer принадлежит форме из основной программы, то при возникновении события система отправляет сообщение WM_TIMER окну формы, которое ставится в очередь и будет обработано вместе с остальными сообщениями в специально предназначенном для этого цикле приложения.


gosha73   (2007-02-03 21:00:00) [13]

Через обычный TTimer.
Когда он срабатывает, то вызывается интерфейсная процедура основной программы. Я боюсь, что события могут пропадать или это станет причиной нестабильной работы программы.


Zeqfreed   (2007-02-03 20:52:00) [14]

Как реализован таймер?


Наверх

Титульная страница Поиск, карта сайта Написать письмо