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

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
Shouldercannon
Сообщения: 74
Зарегистрирован: 08 июн 2008, 15:49

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]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
dr.Jekill
Сообщения: 509
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

11 ноя 2012, 07:42

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