Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.07;
Скачать: CL | DM;

Вниз

Одноэкземплярное прилрожение   Найти похожие ветки 

 
BIN ©   (2002-10-28 17:14) [0]

Запускается программа с ключами, как бы в одном экземпляре, внешне так и выглядит, а на самом деле повторные запуски, с ключами или без, оставляют в памяти куски 3,5 метра, которые приходится удалять вручную. Сама прога около 10 м памяти кушает. Подскажите плиз, в чем дело, или хотя бы общие методы отладки в таких случаях или где можно посмотреть на них!

program FServer;

uses
Forms, Classes, SysUtils,
Windows,
uServer in "uServer.pas" {fmMnServer},
uRecList in "uRecList.pas",
uLogon in "uLogon.pas" {fmLogon};

{$R *.res}
var fmMnServer : TfmMnServer = nil;
FServHandle : THandle;
ParamList : TStringList;
i : integer;
Second : boolean = true;
begin
Application.Initialize;
ParamList := TStringList.Create;
for i :=1 to ParamCount do
begin
ParamList.Add(ParamStr(i));
end;
// fmMnServer.CheckParamList;
// Ищем запущенное приложение

FServHandle := FindWindow("TfmMnServer", "TableScaner");
if FServHandle = 0 then // Если не находим то
begin
// если запущено с ключом Е то
if (AnsiUpperCase(ParamStr(1)) = "/E" )
or (AnsiUpperCase(ParamStr(2)) = "/E" )
then Exit; //Выход из программы
Second := false;
fmMnServer := TfmMnServer.Create(nil); // Создаем форму
FServHandle := fmMnServer.Handle; // присваиваем ее дискриптор
end
else Second := true;
if ParamCount > 0 then
begin
for i := 0 to ParamList.Count - 1 do
begin
if AnsiUpperCase(ParamList.Strings[i]) = "/S" // Показать программу
then SendMessage(FServHandle, WM_FSERVER, FShow,0);
if AnsiUpperCase(ParamList.Strings[i]) = "/H" // Скрыть программу
then SendMessage(FServHandle, WM_FSERVER, FClose,0);
if AnsiUpperCase(ParamList.Strings[i]) = "/E" // Закрыть программу
then SendMessage(FServHandle, WM_FSERVER, FExit,0);
if AnsiUpperCase(ParamList.Strings[i]) = "/P" // Остановить скан
then SendMessage(FServHandle, WM_FSERVER, FStop,0);
if AnsiUpperCase(ParamList.Strings[i]) = "/R" // Запустить скан
then SendMessage(FServHandle, WM_FSERVER, FStart,0);
end;
end;
If Second then Application.Terminate;
ParamList.Free;
try repeat Application.ProcessMessages;
Application.HandleMessage;
until Application.Terminated; // закрываем приложение
finally
if fmMnServer <> nil then
begin
fmMnServer.free; // уничтожаем форму
fmMnServer := nil;
end;
end;
end.


 
Smithson ©   (2002-10-28 17:18) [1]

не then Exit, а Application.Close


 
BIN ©   (2002-10-29 07:53) [2]

не не в этом дело даже ежели Application.Terminate использовать, мусор остается при повторных запусках с любыми ключами или вообще без них. мож еще у кого хотя бы мысли какие есть как из ситуёвины выбраться


 
Cobalt ©   (2002-10-29 08:43) [3]

А как проверяешь наличие "мусора"?
Попробуй так:
Second := false;
Application.Initialize;
fmMnServer := TfmMnServer.Create(nil);
....
If Second then Application.Terminate;
и вместо
try repeat Application.ProcessMessages;
Application.HandleMessage;
until Application.Terminated;

Application.Run;




 
Andrey007   (2002-10-29 09:32) [4]

То есть, Вам нужна блокировка повторных запусков программы?


 
BIN ©   (2002-10-29 10:23) [5]

2 Cobalt
1.Наличие мусора вижу в диспетчере задач / процессы, я под NT
2.так нельзя, здесь нет главной формы, поэтому и применен repeat ... until...
2 Andrey007
да, но еще и управлять программой из командной строки при помощи ключей


 
Юрий Зотов ©   (2002-10-29 10:31) [6]

http://www.delphikingdom.com/helloworld/samples_win.htm

Там три примера решения Вашей задачи, без всяких утечек памяти и более надежные, чем FindWindow(Ex). А 3-й пример - почти прямо Ваша задача и есть.


 
BIN ©   (2002-10-29 15:48) [7]

Все просто оказалось -

If Second then
begin
Application.Terminate;
exit;
end;

Всем большое спасибо



Страницы: 1 вся ветка

Текущий архив: 2002.11.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
14-21795
^Sanya
2002-10-19 00:15
2002.11.07
Почемураз работчики приложений Delphi обходят стороной???!!!!


3-21432
nick-from
2002-10-19 11:19
2002.11.07
Косяки в Master-Detail


4-21868
Adept
2002-09-24 11:38
2002.11.07
Как сделать окно находящееся ниже всех.


1-21550
^Sanya
2002-10-26 23:04
2002.11.07
Проблема с InstallShield:


14-21760
MaximatorVeter
2002-10-15 19:25
2002.11.07
XP