|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.04.2014, 09:26 | #1 |
Регистрация: 03.06.2008
Сообщений: 6
|
Выполнение действия в определенное время (утечки памяти)
Здравствуйте! помогите решить проблему пожалуйста. Вот код для примера:
Код:
Ставлю Timer1.Enabled := false; - потребление памяти не увеличивается ни на байт. проблема в функции timetostr - она не высвобождает память. Есть какой то вариант запуска определенного действия если наступило определенное время? Условие: программа должны быть постоянно запущена, стандартный виндовый планировщик не нужен, важно именно запуск из программы в нужное время определенного действия. |
17.04.2014, 09:52 | #2 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Зачем хранить change_time в string и зачем дополнительная переменная для текущего времени?
Код:
Код:
Последний раз редактировалось Streletz; 17.04.2014 в 10:48. |
17.04.2014, 10:11 | #3 |
ПШП
Участник клуба
Регистрация: 15.07.2013
Сообщений: 1,872
|
Не будет ему счастья. Условие time() = change_time практически никогда не выполнится.
|
17.04.2014, 12:34 | #4 |
Заблокирован
Регистрация: 02.03.2014
Сообщений: 439
|
Код:
|
17.04.2014, 12:47 | #5 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
А, что касается вариантов реализации с приведением типа при каждой обработке OnTime или однократном, то пусть ТС сам выбирает то, что подходит лично ему. |
|
17.04.2014, 21:41 | #6 |
Заблокирован
Регистрация: 02.03.2014
Сообщений: 439
|
Streletz При чём тут доли? Обработчик OnTime будет работать раз в 60 секунд. Если таймер запущен в 12.00.05, то он будет срабатывать каждую минуту плюс пять секунд, и условие совпадения времени ни когда не выполнится (13.00.05 <> 13.00.00).
|
17.04.2014, 22:41 | #7 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
Если таймер запущен в 12:00:05, то погрешность будет всего 5 секунд. А, если он запущен в 12:00:52? Как это ни странно, но FormatDateTime отбрасывает секунды, по сути, округляя значение в меньшую сторону. Поэтому, в данном случае, погрешность срабатывания события составит почти минуту. Что, во многих ситуациях, не совсем хорошо. Конечно, многое здесь зависит от того, какая точность срабатывания нужна. Если достаточно точности +/- 1 минута, то Ваш вариант безусловно лучше. Но, если событие должно отработать ровно в 13:00:00, то тогда имеет смысл уменьшить интервал и перейти к условию совпадения времени. Всё имеет как достоинства, так и недостатки. Поэтому, одно лучше работает при одних условиях, а другое лучше работает при других. Поэтому, спорить о том какой именно вариант лучше, по меньшей мере бессмысленно. Ещё, раз повторюсь, что конкретный выбор зависит от специфики задачи. Знает её только ТС. Ему и выбирать из предложенных вариантов наиболее подходящий. |
|
17.04.2014, 22:52 | #8 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Не понимаю стремления к точному сравнению времени. Почему бы не запомнить время срабатывания в формате TDateTime и в таймере сравнивать текущее время с ним на больше или равно. Сработает для любых интервалов таймера. По поводу утечек памяти для TimeToStr сильно сомневаюсь, очень сильно. Хотя все может быть, нужно протестировать код от ТС
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
17.04.2014, 22:56 | #9 | |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
Цитата:
Но обсуждение требований к точности уже отдельная тема. |
|
17.04.2014, 23:00 | #10 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
При чем здесь специфика? При любом способе сравнения точно никогда не сработает. А специфика задачи - просто чего-то сделать в заданное время. Точность управляется только интервалом таймера
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выполнение процедуры через определенное время | 2909 | Общие вопросы Delphi | 1 | 17.05.2013 20:52 |
Утечки памяти | YourLastSong | Общие вопросы C/C++ | 26 | 02.11.2011 22:56 |
утечки памяти | KOLANICH | Общие вопросы C/C++ | 3 | 30.01.2011 00:15 |
Как приостановить выполнение макроса на определенное время? | Ranel | Microsoft Office Excel | 6 | 16.06.2009 09:27 |
Выполнение действия в заданное время | WOWan234 | Помощь студентам | 6 | 02.05.2007 01:52 |