Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2009, 18:15   #1
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию Как правильно завершить поток

Здравствуйте!
В потоке, есть Exception, исходя из значения которого мы передаем управление завершению этого самого потока, но при этом появляется вот такая неприятность когда маркер трассировки появляется на LabelRename.Suspend; () и по нажатию на Ok непонятно почему мы снова возвращаемся в поток (F7), а маркер стоит на Form1.http1.Get(Form1.edit_guest_ad ress.Text); и только потом, поток вроде бы, завершается :confused: но опять же как он завершается, переходим на LabelRename.Suspend; и после этого сразу же бежим в Exit потока не делая ничего, или может просто Delphi 7 трассируя как иногда бывает не показывает что что то там делается :)

Поток
Код:
  try
            Form1.http1.Get(Form1.edit_guest_adress.Text);
            except
            on E : Exception do begin
            Form1.timer_upd.Enabled:=false;
            programmhalt;
            Exit;
            end;
Процедура, в которой таится завершение (приостановка) потока

Код:
LabelRename.Suspend;
Form1.timer_upd.Tag:=3;
Form1.timer_upd.Enabled:=false;
opt_file.WriteString('other','temp_adress',Form1.edit_guest_adress.Text);
if form_opt.check_reconnect.Checked = true then begin
Form1.Caption:='snm';
form_opt.time_wait_reconnect.Enabled:=true;
end
else begin
...
Еще вопрос, как остановить поток полностью.То - есть когда мы делаем suspend мы паузим поток как я понял, а вот когда resume то поток начинает работать с того места где мы его остановили? Об этом нигде ничего не нашел толкового...

Последний раз редактировалось Des; 08.05.2009 в 18:21.
Des вне форума Ответить с цитированием
Старый 08.05.2009, 18:25   #2
Neeter
Форумчанин
 
Аватар для Neeter
 
Регистрация: 22.02.2009
Сообщений: 875
По умолчанию

Код:
а вот когда resume то поток начинает работать с того места где мы его остановили?
Да.
Код:
Еще вопрос, как остановить поток полностью?
LabelRename.Terminate вроде

Может
Код:
LabelRename.Suspend;
Писать в самом конце programmhalt?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.

Последний раз редактировалось Neeter; 08.05.2009 в 18:43.
Neeter вне форума Ответить с цитированием
Старый 08.05.2009, 18:52   #3
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Иногда пытаясь из самого потока, то-есть из LabelRename.Execute делать Suspend; появляется ошибка: (на память не совсем помню) Отказано в доступе ошибка 5...
Вот сейчас сижу извращаюсь, и все думаю что придется programmhalt в отдельный поток пихать и вызывать уже синхронизацией. Но если на то пойдет, то мне ооочень многое придется забивать в отдельные потоки, а это явно больше 16, кажется это максимум что можно делать в Windows XP, ну по крайней мере советуют не больше =)
Des вне форума Ответить с цитированием
Старый 08.05.2009, 19:08   #4
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

Цитата:
Сообщение от Neeter Посмотреть сообщение
Может
Код:
LabelRename.Suspend;
Писать в самом конце programmhalt?
Пробовал, результата ни какого...
А паузу ставить нужно я думаю в начале, иначе поток успеет что нибудь предпринять)))

К примеру сейчас вот поставил терминате в конец programmhalt'а, и ошибка на подобие вышенаписаной появляется на строке
Код:
opt_file.WriteString('other','temp_adress',Form1.edit_guest_adress.Text);
Здесь думаю я нужна синхронизация )))
Полез читать маны которых найти не смог
Des вне форума Ответить с цитированием
Старый 08.05.2009, 19:45   #5
Des
Форумчанин
 
Регистрация: 12.11.2008
Сообщений: 124
По умолчанию

неужели это идиальный способ завершить поток ?
http://forum.codeby.net/topic3392s0....40&#entry16640
Des вне форума Ответить с цитированием
Старый 08.05.2009, 20:56   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Код:
TThread.Terminate;
TThread.WaitFor;
TThread.Free;
BOBAH13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как завершить процесс на удаленном Хосте? Stilet Win Api 4 25.03.2009 13:06
Как завершить программу по условию Iceman Общие вопросы Delphi 8 14.03.2009 00:46
Как програмно завершить работу компьютера? Bill Gates Win Api 4 07.01.2008 11:35
как завершить роботу компьютера с помощью кода Amor_06 Безопасность, Шифрование 10 06.01.2008 23:30
Как корректно завершить цикл? Iren Microsoft Office Excel 4 02.11.2007 09:58