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;
При закрытии формы появляется ошибка на строке
[ATTACH]1511[/ATTACH]
Задача:
Подключиться к серверу и слушать, что он пришлёт до завершения работы приложения. Прослушка должна быть обязательно в отдельном потоке, иначе форма повиснет.
[code]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;[/code]
При закрытии формы появляется ошибка на строке
[code]s := FormMain.IdTCPClient1.ReadLn();[/code][ATTACH]1511[/ATTACH]