Получение данных В Потоке

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: Получение данных В Потоке

Re: Получение данных В Потоке

dr.Jekill » 11 ноя 2012, 07:42

У Вас не установлен флаг FreeOnTerminate, соотв. позаботиться об освобождении ресурсов нужно самому

Получение данных В Потоке

Shouldercannon » 03 фев 2012, 18:46

Задача:
Подключиться к серверу и слушать, что он пришлёт до завершения работы приложения. Прослушка должна быть обязательно в отдельном потоке, иначе форма повиснет.

Код: Выделить всё

procedure TFormMain.BConnectClick(Sender: TObject);
var
  My_Thread: TMy_Thread;
begin
  IdTCPClient1.Host := '77.108.194.247';
  IdTCPClient1.Port := 80;
  IdTCPClient1.Connect(1000);
 
  My_Thread := TMy_Thread.Create(True);
  My_Thread.FreeOnTerminate := False;
  My_Thread.GoMemo := Memo1;
  My_Thread.Resume;
end;
 
procedure TMy_Thread.Execute;
begin
  while not Terminated do
  begin
    if FormMain.IdTCPClient1.Connected then
    begin
      s := FormMain.IdTCPClient1.ReadLn(); // Показывает сюда
      Synchronize(SyncProc);
    end;
  end;
end;
 
procedure TMy_Thread.SyncProc;
begin
  GoMemo.Lines.Add('[' + TimeToStr(Now) + '] - IdTCPClient1: ' + s);
end;
При закрытии формы появляется ошибка на строке

Код: Выделить всё

s := FormMain.IdTCPClient1.ReadLn();
[ATTACH]1511[/ATTACH]

Вернуться к началу