Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Процесс не выгружается [D7, Win2k]


Страницы:   1 2

Belkova ©   (2005-06-30 20:14:00) 

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


3DxFantastika   (2005-07-02 08:46:00) [1]

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


The ExitProcess function ends a process and all its threads.

VOID ExitProcess(

   UINT uExitCode  // exit code for all threads  
  );

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


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

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

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


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


Belkova   (2005-07-01 14:27:00) [3]

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


Belkova   (2005-07-01 14:23:00) [4]

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


evvcom   (2005-07-01 14:15:00) [5]


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

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


Stakan   (2005-07-01 14:09:00) [6]

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


Belkova   (2005-07-01 14:07:00) [7]

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


Belkova   (2005-07-01 13:54:00) [8]

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


evvcom   (2005-07-01 13:52:00) [9]


> Faraday   (01.07.05 13:46) [25]

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

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


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

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


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

Попробуй после 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;

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


evvcom   (2005-07-01 13:07:00) [12]


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

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

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

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


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


Tor   (2005-07-01 11:03:00) [13]

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


Belkova   (2005-07-01 10:56:00) [14]

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


Tor   (2005-07-01 10:31:00) [15]

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


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

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


evvcom   (2005-07-01 10:15:00) [17]

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


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

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


evvcom   (2005-07-01 09:49:00) [19]


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

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


evvcom   (2005-07-01 09:47:00) [20]

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

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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо