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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 16:31   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Как отменить поток

Здравствуйте, коллеги ! Можно ли как-то отменить, снять поток ? Например у меня запущен поток, я нажимаю на кнопку и он снимается . . . То есть тот код который запущен в потоке останавливает свою работу .
RIO вне форума Ответить с цитированием
Старый 27.09.2009, 16:45   #2
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

поток.Suspend
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 28.09.2009, 14:39   #3
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Спасибо А как проверить или в данный момент поток выполняет какую нибудь работу ?
RIO вне форума Ответить с цитированием
Старый 28.09.2009, 14:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

TThread.Suspended: Boolean;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.10.2009, 01:46   #5
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Такс, не могу разобраться с проблемой, мне нужно корректно убить поток при закрытии формы (если он работает) . . . Делаю так :

Код:
  TGo= class(TThread)
  private
  protected
    procedure Execute; override;
  end;

var
  Box: TBox;
  Go: TGo;

implementation

{$R *.dfm}

procedure TBox.GoButtonClick(Sender: TObject);
begin
  Go := TGo.Create(True);
  Go.FreeOnTerminate := True;
  Go.Priority := TPNormal;
  Go.Resume;
end;

procedure TGo.Execute;
var
  S: string
begin
  S := IdHTTP1.Get('Сайтег');
end;

procedure TBox.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if not Go.Terminated then
     Go.Terminate;
end;
Но вылетает ошибка, при закрытии, такого типа : EAccessViolation Интересно в чем проблема ?
RIO вне форума Ответить с цитированием
Старый 10.10.2009, 23:48   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
if not Go.Terminated then
Go.Terminate
Цитата:
Go.FreeOnTerminate := True;
вдумайтесь в сочетание этих строк кода.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.10.2009, 00:00   #7
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Ага Как я понял нужно Go.FreeOnTerminate := False; Так ? Если да, то можете написать полный код для кнопочки по нажатию на которую будет корректно завершаться поток ?
RIO вне форума Ответить с цитированием
Старый 11.10.2009, 00:11   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
if Go<>nil then Go.Terminate;
вот один пример.
я лично у себя делал через Suspend а уничтожается сам(а то почему то висло...)

PS:надо попробывать применить FreeOnTerminate...мож что выйдет...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 11.10.2009 в 00:15.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.10.2009, 01:14   #9
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

В чём разница между suspend и terminate?
Лично я всегда использовал terminate =\
TwiX вне форума Ответить с цитированием
Старый 11.10.2009, 15:05   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

первое это пауза.
второе завершение.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как локаольно отменить border-collapse:collapse;? max_kulikoff HTML и CSS 1 09.05.2009 15:58
Как правильно завершить поток Des Общие вопросы Delphi 5 08.05.2009 20:56
TextBox как отменить курсор LeGAl Общие вопросы .NET 4 30.04.2009 01:51
Как отменить изменения изображения? ALEX_RAS Помощь студентам 1 20.05.2008 08:23
Как остановить поток? Никки Win Api 3 06.12.2007 22:04