Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Threads, Не выгружается прога 
:(
    Опции темы
z-END
  Дата 7.3.2004, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



notify.gif При запуске OpenDialog.Execute создаются Threads которые при закрытии программы невыгружаются, и программа остается висеть в памяти...
Из-за чего это происходит и как это победить?


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
<Spawn>
Дата 7.3.2004, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Так убей поток сам:
1) При создании укажи FreeOnTerminate := True;
2) При закрытии проги укажи MyThread.Terminate;


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Петрович
Дата 7.3.2004, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1000
Регистрация: 2.12.2003
Где: Москва

Репутация: 25
Всего: 55



Цитата
При запуске OpenDialog.Execute создаются Threads которые при закрытии программы невыгружаются, и программа остается висеть в памяти...

Что-то новенькое smile.gif.
Покажи-ка код.


--------------------
Все знать невозможно, но хочется
PM ICQ   Вверх
z-END
Дата 7.3.2004, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



<Spawn> ты меня неприваильно понял, не я создаю Threads, они автоматически создаются при запуске OpenDialog.Execute и соответственно я не могу указать им Terminate. т.е. может это и можно как нить здеалть, но как я незнаю.

Петрович с кодом наврядли получится весит он ну уж очень многоsmile.gif
Но суть его рассказать могу:
Имеется программа.exe которая динамически загружает Н-ное_количество_.dll - типа плугины в которых хранятся формы, все это чудо (и программа и плугины) используют еще одну dll - назовем ее ядро через которую они (плагины и сама прога) обмениваются различной информацией, в ядре есть процедуры:
type TsendMsg = procedure (CMD: PAnsiChar; Param1, param2: ANsiChar; Flags: Integer);
1. InitMain (App: TApplication) - прога.ехе скидывает значение Application в ядро
2. RegisterModule (Mx: TsendMsg); - все плугины и прога вставляют сюда процедуры обработки информации;
3 SendMsg (CMD: PAnsiChar; Param1, param2: PANsiChar; Flags: Integer) - ядро при выполнении этой процедуры передает эти параметры всем модулям зарегестрированным в RegistrModule
4. EndSession (ExitType: Integer); при вызове ее сохраняется лог, и очищаются переменные занятые при RegisterModule; после чего вызывается FreeLibraryAndExitThread (App.Handle); если FreeLib не вызывать выдается сообщение об ошибке Invalid Pointer Opertion;
Далее, в плугинах набор процедур нестандартный, да и неизвесно какие надо будет загружать а какие нет, поэтому они загружаются так:

Plugin[x].Handle := LoadLibrary (xxx);
@Plugin[x].Activate := GetProcAdress (xxx); - инициализация модуля, создание формы плугина
@Plugin[x].DeActivate := GetProcAdress (xxx); - закрытие плугина и его формы

@Plugin[x].GetActionList := GetProcAdress (xxx); - список действий которые может выполнить этот плугин
@Plugin[x].DoActionN := GetProcAdress (xxx); - выполнить N действие из списка действий
@Plugin[x].GUI := GetProcAdress (xxx); - функция возврацает TForm плугина

в проге.exe
FormCreate
InitMain (Application);
...
end;

FormClose:
{
цикл plugin[x].Deactevate;
FreeLibrary (Plugin[x].Handle)
}
...
Action := caFree;
EndSession;
end;

Вот, если вкраце то всеsmile.gif все это работает, без ошибок до того момента пока не вызвать TopenDialog, или TWebBrowser в этом случае подпихиваются к процессу еще несколько Threads, которые не выгружаются.


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
z-END
Дата 8.3.2004, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прафесар™
****


Профиль
Группа: Комодератор
Сообщений: 3014
Регистрация: 13.3.2003
Где: Венья, Пиетари

Репутация: 11
Всего: 102



Во блин, все гениальное - то простоsmile.gif надо оказывается еще и процесс закрыть т.е. ExitProcces тогда все пучком!


--------------------
Каждый чилавек пасвоему праф...а памоему НЕТ! 

PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0944 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.