Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.07;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
6-21729
Mufta
2002-09-07 18:11
2002.11.07
Мастера а как программно менять прокси через реестр


14-21734
Николай Быков
2002-10-17 17:42
2002.11.07
Оцените....


1-21618
Balu
2002-10-23 15:33
2002.11.07
---|Ветка была без названия|---


14-21816
Igorek
2002-10-16 12:29
2002.11.07
А может программистам к власти прийти? ;-)


14-21742
kaif
2002-10-12 12:39
2002.11.07
ScreenCam тормозит...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский