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

Вниз

Процесс не выгружается   Найти похожие ветки 

 
Belkova ©   (2005-06-30 20:14) [0]

Мастера Delphi! Посоветуйте, пожалуйста.  Процесс при закрытии главной формы не выгружается. В диспечере задач смотрю:  в приложениях ничего нет, а в процессах остается. Что делать?


 
Юрий Зотов ©   (2005-06-30 20:19) [1]

Есть ли обработчики, срабатывающие при закрытии формы или приложения? Если да, покажите их код.


 
Belkova ©   (2005-06-30 20:29) [2]

Таких обработчиков нет.


 
Belkova ©   (2005-06-30 20:34) [3]

В файле проекта есть код для того чтобы не запускалась копия программы
var Rez:THandle;
begin
Rez:=CreateFileMapping(HWND($FFFFFFFF),nil,PAGE_READWRITE,0,1024,"PrjAlfa.exe"); //èìÿ ôàéëà
if (GetLastError<>ERROR_ALREADY_EXISTS) then
begin
 Application.Initialize;
 Application.CreateForm(TFSYS, FSYS);
 Application.CreateForm(TFLogin, FLogin);
{Создание форм}
 Application.Run;
 CloseHandle(Rez);
end
А главная форма просто вызывается Close, в событии OnClose ничего не прописано.


 
Юрий Зотов ©   (2005-06-30 21:26) [4]

Попробуйте поставить CloseHandle(Rez) после end:

Rez := CreateFileMapping(...);
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
 ...
end;
CloseHandle(Rez);


 
Belkova ©   (2005-06-30 21:39) [5]

Не выгружается.


 
Юрий Зотов ©   (2005-07-01 03:13) [6]

Чудес не бывает - значит, что-то где-то Вы все же перекрыли.


 
Просто Джо ©   (2005-07-01 03:46) [7]


> [3] Belkova ©   (30.06.05 20:34)

А как называется класс главной формы?


 
Belkova ©   (2005-07-01 08:41) [8]

TForm


 
Belkova ©   (2005-07-01 08:48) [9]

И еще момент, это происходит не на всех компьютерах. На ноутбуке, на котором программа пишется, все нормально выгружается. Когда копирую на другие компьютеры, такое происходит.


 
Digitman ©   (2005-07-01 08:53) [10]


> Belkova


что у тебя вообще в приложении делается-то ?
в угадайку играть будем ?


 
Belkova ©   (2005-07-01 09:07) [11]

Вообще-то приложение работает с БД. Главная форма вызывает форму, которая  производит соединение с БД. (Там заводится пароль и Юзер).


 
Digitman ©   (2005-07-01 09:09) [12]


> Belkova ©   (01.07.05 09:07) [11]


приводи код


 
Belkova ©   (2005-07-01 09:22) [13]

На главной форме есть меню, в котором вызов диалога для пароля, и выход из приложения.
Flogin.Show
и
FDM.DBAlfa.Connected:=False;
fSYS.Close;
В форме Flogin Есть поле для ввода пароля и юзера
и кнопочка Ok, на которую
  ConnectToIniFile;
  fDM.DBAlfa.Params.Values["Password"]:=EdPassword.text;
  fDM.DBAlfa.Params.Values["user_name"]:=EDUserName.Text;
  try
   fDM.DBAlfa.Connected:=True ;
   FLogin.Close;
   FDir.Show
   except
   MessageDlg("Неправильный пароль",mtError,[mbOk],0);
   FDM.DBAlfa.Connected:=False;
  end;

procedure TFLogin.ConnectToIniFile;
var Cfg:TIniFile; S_Temp:String;
begin
if FDM.DBAlfa.Connected then FDM.DBAlfa.Connected:=False;
 Cfg:=TIniFile.Create(ExtractFilePath(ParamStr(0))+"connect.ini");
 S_Temp:=Cfg.ReadString("CONFIG","Server","localhost");
 if S_Temp="localhost" then
 begin
 fDM.DBAlfa.DatabaseName:=Cfg.ReadString("CONFIG","Path","");
 end else
 begin
  fDM.DBAlfa.DatabaseName:=Cfg.ReadString("CONFIG","Server","")+":"+Cfg.ReadString("CONFIG","Path","");
 end;
 Cfg.Free;
end;


 
Digitman ©   (2005-07-01 09:34) [14]

СУБД - InterBase ?

что такое fDM, fDir ? где , как, когда создаются , что в них творится ?


 
Belkova ©   (2005-07-01 09:44) [15]

СУБД - InterBase
FDM модуль данных, где все Query, dataSet и пр.
fdir форма, на которой расположен прайс и вызываются все остальные формы, которые выписывают документы и прочии торговые операции. Создаются все формы в проекте
Application.Initialize;
Application.CreateForm(TFSYS, FSYS);
Application.CreateForm(TFLogin, FLogin);
и т.д.


 
evvcom ©   (2005-07-01 09:47) [16]

Попробуй типа:
try
 WriteLnLog("Подключение...");
 fDM.DBAlfa.Connected:=True ;
 WriteLnLog("Подключился");

Естественно WriteLnLog надо реализовать самой. После закрытия и "невыгруза" посмотреть лог-файл.

Хотя скорее всего в логе будет "Подключился". Вероятно fDM.DBAlfa.Connected := True; запускает отдельный поток и в нем пытается асинхронно подключиться. В этих случаях в грамотно написанных компонентах предусматривают способы извещения основного потока об удаче/неудаче подключения, а также должны быть какие-нибудь свойства таймаута при соединении. Если есть такие события, то "Подключился" или "Не подключился" надо вынести туда.


 
evvcom ©   (2005-07-01 09:49) [17]


> что такое fDM, fDir

Плюс к этому что такое DBAlfa?


 
Belkova ©   (2005-07-01 09:54) [18]

DBAlfa Это компонент IBDateBase.


 
evvcom ©   (2005-07-01 10:15) [19]

В TIBDateBase есть обработчик AfterConnect. В нем и пишем WriteLnLog("Подключился"); тестируем и смотрим лог. Возможно на некоторых машинах существуют проблемы с подключением, поэтому и не выгружается сразу. Должно выгружаться по истечении какого-то более длительного времени.


 
Belkova ©   (2005-07-01 10:20) [20]

По истечении приемлемого времени не выгружается. Понаблюдаю еще.
Обработчик напишу, посмотрю. Спасибо.


 
Tor ©   (2005-07-01 10:31) [21]

Проверку пароля лучше производить в файле главной формы а не на кнопке ОК в форме вода пароля. Показыватьее как модальную возвращать mrOK и все это в цикле(в место рекурсии) там можно выводить сообщение о повторной попытке. Могу кинуть пример.
А при закрытии приложения ты закрываешь соединение с базой и всеми таблицами?


 
Belkova ©   (2005-07-01 10:56) [22]

Спасибо. Я поняла, но от примера не откажусь
belkova@alfacom.perm.ru
При закрытии делаю DBAlfa.Connected:=false;
Полагаю, что таблицы при этом тоже закроются.


 
Tor ©   (2005-07-01 11:03) [23]

Незнаю, я лично сначала закрываю все таблицы а потом БД. Щас найду и вышлю.


 
evvcom ©   (2005-07-01 13:07) [24]


> При закрытии делаю DBAlfa.Connected:=false;

> Незнаю, я лично сначала закрываю все таблицы а потом БД

destructor TDataSet.Destroy;
begin
 Destroying;
 Close;
 ...

destructor TCustomConnection.Destroy;
begin
 inherited Destroy;
 SetConnected(False);
 ...


Вывод: проблема не в этом.


 
Faraday   (2005-07-01 13:46) [25]

Попробуй после IBDataBase.Close поставить Sleep(1000).
Если не поможет - вставь в событие FormCloseQuery:
procedure TfmMainForma.FormCloseQuery(Sender: TObject;
 var CanClose: Boolean);
var n:Integer;
begin
n:=MessageBox(Application.Handle,Pchar("Закончить работу с прогой ?"),PChar("Подтверждение"),MB_YESNO + MB_ICONQUESTION);
if n=IDYES then
begin
Fl_Close:=true;
CanClose:=True;
end
else
CanClose:=false;
end;

Как ни странно, но мне помогало.


 
Faraday   (2005-07-01 13:48) [26]

Fl_Close:=true; - это я из своей проги скопировал - надо удалить.


 
evvcom ©   (2005-07-01 13:52) [27]


> Faraday   (01.07.05 13:46) [25]

Шаман, да и только. Чудеса какие-то рассказываешь.

Тогда уж по тексту, элегантнее писать:
CanClose := n = IDYES;
вместо всего этого наворота с проверкой булевой переменной и присвоения констант другой.


 
Belkova ©   (2005-07-01 13:54) [28]

Спасибо, попробую.


 
Belkova ©   (2005-07-01 14:07) [29]

К сожалению не помогло.


 
Stakan ©   (2005-07-01 14:09) [30]

Belkova ©   (01.07.05 13:54)
Попробуй как вариант принудительно разрывать соединение с базой в файле .dpr (перед CloseHandle)


 
evvcom ©   (2005-07-01 14:15) [31]


> Belkova ©   (01.07.05 14:07) [29]

Ну а [19] пробовала? Что в логе? У тебя скорее всего проблема с коннектом, поэтому и [30] не поможет.


 
Belkova ©   (2005-07-01 14:23) [32]

Пишет подключился.


 
Belkova ©   (2005-07-01 14:27) [33]

Перед перед CloseHandle разрывать соединение попробовала, не помогло.


 
КиТаЯц ©   (2005-07-01 14:47) [34]

Знаю, что ща народ ржать будет, но... вот реальный кусок из моей программы:

procedure TModule.DataModuleDestroy(Sender: TObject);
begin
 null;  // ХЗ зачем это надо, но ошибка при закрытии почему-то пропала
end;


(TModule = class(TDataModule), где, собственно все компоненты IBX и лежат)


 
3DxFantastika ©   (2005-07-02 08:46) [35]

"экстремальный" выход: ExitProcess(0);


The ExitProcess function ends a process and all its threads.

VOID ExitProcess(

   UINT uExitCode  // exit code for all threads  
  );

но не рекомендуется ..



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

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

Наверх




Память: 0.55 MB
Время: 0.053 c
1-1119975946
heady
2005-06-28 20:25
2005.07.18
TPopupMenu изменить Caption


10-1096551187
AntonSh
2004-09-30 17:33
2005.07.18
COM Server


14-1119348247
DillerXX
2005-06-21 14:04
2005.07.18
Delphi2C


1-1120035085
alex-kosmonavt
2005-06-29 12:51
2005.07.18
randomize


1-1120042870
sofs
2005-06-29 15:01
2005.07.18
Загрузка последеней версии файла