![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибочны ли мои опасения? [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]Как реализован таймер?