Показать сообщение отдельно
  #18  
Старый 17.04.2014, 04:15
Ahton Ahton вне форума
Прохожий
 
Регистрация: 05.01.2007
Сообщения: 38
Репутация: 10
По умолчанию

Цитата:
Сообщение от poli-smen
Узнать текущую дату можно функцией Date. Сравнивать даты обычной операцией сравнения.Дата меняется раз в сутки.В каком смысле?TTimer - это достаточно гуманный способСкорее всего ты в обработчике таймера занимаешь память, но не освобождаешь, вот и утечка. Сам TTimer утечек памяти не делает.

ок, смотрите пример:
Код:
var
current_time: TDateTime;
change_time: string;
begin
current_time := time();
change_time := ('11:00:00');
if timetostr(current_time) = change_time then
showmessage('test');
end;

код чисто для примера. Вставляю код в таймер, ставлю интервал у таймера - минуту (60000), переменную change_time выставляю на 5 минут больше текущего времени, запускаю прогу, открываю диспетчер задач, смотрю на потребление памяти. При старте у меня 2944КБ потребление, через минуту 2952КБ и т.д. по возрастающей (+8 КБ). За сутки работы этого кода, размер потребления памяти по диспетчера задач увеличился с 3 до 9 МБ

Ставлю Timer1.Enabled := false; - потребление памяти не увеличивается ни на байт.

Где ошибка?

ЗЫ: Delphi 7 Enterprise (Build 4.453), Windows XP SP3.

ЗЫ2: Предполагаю что такую утечку дают функция timetostr, она выделяет память под значение, но не освобождает её... как переделать по другому не знаю.
Пробовал сделать переменную mytime := timetostr(current_time); и сравнивать mytime с change_time - но эффект тот же, потребление памяти увеличивается
Ответить с цитированием