Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.02.2012, 19:22   #1
Зод
Форумчанин
 
Регистрация: 25.08.2011
Сообщений: 140
По умолчанию Таймер. Как правило завершить работу с условиями

Есть на форме таймер, 30 его переодичность.
В обработчике несколько условий.
Проверяет запущена ли делфи. Если да то выводит showmessage если нет то ничего. И такое же условие но на блокнот. Все работает. Но когда запускаешь эту программу и не запускаешь ни делфи ни блокнот хотя бы 30 минут эта программа требует памяти много. Как я понимаю я не высвобождаю память в коде и требую все больше и больше. Как этого избежать?
функция на проверку процессов:
Код:
 function IsRunning(sName: string): boolean;
var
  han: THandle;
  ProcStruct: PROCESSENTRY32;
  sID: string;
begin
  Result := false;
  han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
  if han = 0 then
    exit;
  ProcStruct.dwSize := sizeof(PROCESSENTRY32);
  if Process32First(han, ProcStruct) then
  begin
  repeat
  sID := ExtractFileName(ProcStruct.szExeFile);
  if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
  begin
  Result := true;
  Break;
  end;
  until not Process32Next(han, ProcStruct);
  end;
end;
это единственное что может не высвобождать память. Остальное код это if then else.
Зод вне форума Ответить с цитированием
Старый 23.02.2012, 19:53   #2
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ну дак надо ж хэндл закрыть...
Код:
 function IsRunning(sName: string): boolean;
var
  han: THandle;
  ProcStruct: PROCESSENTRY32;
  sID: string;
begin
  Result := false;
  han := CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0);
  if han = 0 then
    exit;
  ProcStruct.dwSize := sizeof(PROCESSENTRY32);
  if Process32First(han, ProcStruct) then
  begin
  repeat
  sID := ExtractFileName(ProcStruct.szExeFile);
  if uppercase(copy(sId, 1, length(sName))) = uppercase(sName) then
  begin
  Result := true;
  Break;
  end;
  until not Process32Next(han, ProcStruct);
  end;
  CloseHandle(han);
end;
Вот тут ещё посмотрите
_-Re@l-_ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как завершить код? Kerragin Общие вопросы C/C++ 3 14.12.2010 20:23
Как удалить пустые строки с условиями? ru3000 Microsoft Office Excel 9 30.06.2009 00:13
Как правильно завершить поток Des Общие вопросы Delphi 5 08.05.2009 20:56
Как програмно завершить работу компьютера? Bill Gates Win Api 4 07.01.2008 11:35