Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
ВнизОшибочны ли мои опасения? Найти похожие ветки
← →
gosha73 (2007-02-03 20:44) [0]Здравствуйте уважаемые.
Подскажите мне пожалуйста ответ на вопрос:
Пишу программу, которая также подгружает дллку. В дллке есть таймер и время от времени он срабатывает и вызывает одну из процедур интерфейса в основной программе. И вот рассматриваю такой момент. Сработал тамер в дллке и соответсвенно длл-ка вызвала функцию в основной программе. А основная программа в этот момент выполняет какой-либо цикл в одной из своих процедур. Хочется понять, что произойдет. Программа отреагирует на событие только закончив весь цикл, или произойдет какая-либо ошибка? Или же это событие встанет в очередь, т.е. если я правильно понимаю в стёке окажется и будет ждать обработки? Это только мое представление, оно скорее всего ошибочное, но хочу удостоверится спросив у вас.
Спасибо друзья.
← →
Zeqfreed © (2007-02-03 20:52) [1]Как реализован таймер?
← →
gosha73 (2007-02-03 21:00) [2]Через обычный TTimer.
Когда он срабатывает, то вызывается интерфейсная процедура основной программы. Я боюсь, что события могут пропадать или это станет причиной нестабильной работы программы.
← →
Zeqfreed © (2007-02-03 21:18) [3]Если TTimer принадлежит форме из основной программы, то при возникновении события система отправляет сообщение WM_TIMER окну формы, которое ставится в очередь и будет обработано вместе с остальными сообщениями в специально предназначенном для этого цикле приложения.
← →
gosha73 (2007-02-03 21:23) [4]А если TTimer не принадлежит форме? У него owner = nil при его создании в длл.
← →
Zeqfreed © (2007-02-03 21:36) [5]Скорее всего ничего не меняется. В любом случае, процедура вызывается в обработчике сообщений, которые ставятся в очередь.
← →
gosha73 (2007-02-03 21:41) [6]Хм, ну да, в принципе логично.
Большое спасибо.
← →
Loginov Dmitry © (2007-02-04 00:30) [7]> или произойдет какая-либо ошибка?
А с чего ей происходить? TTimer который в dll-ке работает в основном потоке. Пока не отработает одна процедура, другая работать не начнет. Кстати к сведению: TTimer отсчитывает время простоя основного потока. Как только время простоя оказалось равным, к примеру одной секунды, произойдет вызов обработчика OnTimer.
← →
Anatoly Podgoretsky © (2007-02-04 00:38) [8]> Loginov Dmitry (04.02.2007 00:30:07) [7]
Таймер никаких простоев не считает, у него другая задача выдать управление по окончанию интервала, хоть компьютерный таймер, хоть кухонный.
← →
Loginov Dmitry © (2007-02-04 00:44) [9]> у него другая задача выдать управление по окончанию интервала
по окончанию интервала простоя.
← →
gosha73 (2007-02-04 01:44) [10]Да ребята, спасибо, врубился. У меня же действительно однопоточная программа. Меня смущало, что мало ли, у exe и dll разные менеджеры памяти и свои TApplication, это меня тоже смущало.
← →
Германн © (2007-02-04 01:49) [11]
> Loginov Dmitry © (04.02.07 00:44) [9]
>
> > у него другая задача выдать управление по окончанию интервала
>
>
> по окончанию интервала простоя.
>
Какой ещё "интервал простоя"? Ты куда-то не об том молвишь. :)
← →
Loginov Dmitry © (2007-02-04 09:58) [12]> Какой ещё "интервал простоя"? Ты куда-то не об том молвишь.
Выражаюсь тупым языком для простоты понимания :))
Вообще наверно так получается: система кидает в цикл обработки событие о тике таймера только когда основной поток начинает простаивать.
А вообще хэлп читайте! :)))
← →
Anatoly Podgoretsky © (2007-02-04 11:19) [13]Не хочешь сам почитать?
← →
Anatoly Podgoretsky © (2007-02-04 11:21) [14]
> Меня смущало, что мало ли, у exe и dll разные менеджеры
> памяти и свои TApplication, это меня тоже смущало.
А так оно и есть, разные, да еще и RTTI свое
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.02.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c