![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Unregistered |
|
|||
|
Unregistered |
Нужно выполнять процедуру в заданное время. Первое что приходит в голову - поставить на Timer. установить интервал 50 мс . когда наступит время - выполнить процедуру. установить флажок, что процедура выполнена. затем через минуту снять флажок. Вопрос: есть ли более эффективный способ? Например, запускать вместо таймера отдельный поток? Чтоб можно было гарантировать выполнение процедуры? Спасибо.
|
|||
|
||||
| cot |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 4.6.2003 Репутация: нет Всего: нет |
Можно и в отдельный поток. Но мне думается все равно без Timer-а не обойтись. Или в цикле постоянно сканировать системное время.
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
если процедура выполняется длительное время и период через который она будет вызываться мал, то лучше использовать поток в комбинации со Sleep, так как с таймером может произойти следущая картина - таймер запускает процедуру, она выполняется, но не успев закончися, таймер запускает ее снова и получишь зависание своей проги. Было у меня как то такое - отдельный поток был лучшим выходом.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
А я всегда думал, что пока процедура таймера не отработает, то по новой не запуститься. У меня есть программы с длительным выполнением процедуры (запись в базу по сети) на OnTimer и ни разу проблем не было. А можно как-то использовать WaitForSingleObject? В асинхронном варианте это было бы неплохое решение.
|
|||
|
||||
| <Spawn> |
|
|||
![]() Око кары:) ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2776 Регистрация: 29.1.2003 Где: Екатеринбург Репутация: 44 Всего: 64 |
По моему в таймере ты не как не остановишь следущий его вызов. Насколько я помню, сообщение WM_TIMER даже в очередь не ставиться, а прямиком доставляется обработчику.
-------------------- "Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков. |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
В SetTimer передается Handle окна (если пользовать VCL компонент). Наверное очередь таки есть?
|
|||
|
||||
| Петрович |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1000 Регистрация: 2.12.2003 Где: Москва Репутация: 25 Всего: 55 |
Ну неправда. А повторный вызов обычно случается когда во время длительной обработки дергается Application.ProcessMessage Добавлено @ 08:51 Кстати, если для топика использовать таймер, то не надо дергать его каждые 50мс. Достаточно сначала определить разницу между требуемым временем и текущим, и "зарядить" таймер именно на этот интервал. -------------------- Все знать невозможно, но хочется |
|||
|
||||
| X-Vlad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 1 Всего: 5 |
я реализовал подобное так:
на ontimer повесил процедуру, в начале процедуры поставил timer1.enabled:=false; а в конце процедуры опять запускал таймер timer1.enabled:=true; Ну и конечно контролировал что-бы процедура незапустилась опять, если например она выполнилась меньше чем за одну минуту. Вроди нормально работает... |
|||
|
||||
| Unregistered |
|
|||
|
Unregistered |
По поводу интервала, это верно отчасти. Представляю как будет выглядеть реализация интерфейса пользователя... Ну в любом случае, таймер для такого случая не есть гуд.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |