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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Цикл в отдельном потоке 
:(
    Опции темы
Dmitry_177
Дата 25.5.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

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



Если в программе будет созданн отдельный поток, в котором выполняется бесконечный цикл, т.е. выполняется что-то на протяжении всей работы программы в цикле.. После программу выключают, но что будет с этим отдельным потоком? Выгрузится ли он вообще из памяти? И все переменные которые были созданы в нем? И параметр который был передан в функцию потока?
PM MAIL   Вверх
Addmin
Дата 25.5.2007, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: нет
Всего: 15



Конечно выгрузится smile Куда ему ещё деваться? Он всё-таки часть программы, многопоточного (двухпоточного smile ) приложения smile Можно проверить smile


--------------------
PM MAIL   Вверх
Alexeis
Дата 25.5.2007, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Dmitry_177 @  25.5.2007,  15:20 Найти цитируемый пост)
Выгрузится ли он вообще из памяти? И все переменные которые были созданы в нем? И параметр который был передан в функцию потока? 

  Его нужно обязательно завершать иначе будет ругаться. В обработчике Onclosequery нужно просигналить ему и запретить закрытие программы, чтобы поток начал процес завершения работы, дальше подождать окончания его работы и только после это закрыть программу.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
MetalFan
Дата 25.5.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: 62
Всего: 128



если процесс, в контексте которого создан поток, завершится, то соотв. завершатся все его потоки...


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Dmitry_177
Дата 25.5.2007, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

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



Вот к примеру:

Код

function ThreadProc(sock: TSocket): DWORD; stdcall;
var
 s: pchar;
begin
 getmem(s, ...);

 while true do
   begin
     ...
   end;

 freemem(s);
 CloseSocket(sock);
 Result := 0;
end;

procedure Button1Click();
var
 sock: TSocket;
 idThread: DWORD;
begin
 sock := ... ;
 CloseHandle(CreateThread(nil, 0, @ThreadProc, Pointer(sock), 0, idThread));
end;


В функцию потока передается созданный сокет, и поток уже с ним работает.. Еще в этой функции выделяется память для s: PChar, но это может быть любая другая переменная, это я для примера написал. Так вот при закрытии программы что произойдет с этим потоком и что будет с переменными sock и s? удалятся ли они из памяти?
PM MAIL   Вверх
Snowy
Дата 25.5.2007, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



В Win2000 и выше -  да. Удалятся.
Но по честному нужно самому за собой прибирать.
PM MAIL   Вверх
Dmitry_177
Дата 25.5.2007, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

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



Подскажите как тогда известить такой поток и с циклом что нужно завершаться?

Добавлено через 59 секунд
А еще как в обработчике ONClose подождать пока завершится такой поток?
PM MAIL   Вверх
Alexeis
Дата 25.5.2007, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Dmitry_177 @  25.5.2007,  15:55 Найти цитируемый пост)
ONClose

ни как. после его завершения прога уже закроется, нужен Onclosequery.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

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

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

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

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

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


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

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


 




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


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

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