Здравствуйте.
На клиенте происходит прием и отрисовка (OnPaint) на Canvas на основании принятых данных с сервера .
Сервер: отправляет в таймере, в таймере цикл отправки данных.
Клиент принимает в таймере.
Когда данных отправленных сервером не большое количество отрисовка проходит нормально, когда приходит частое количество пакетов,
начинает приложение клиента тормозить.
Думаю капать в сторону потока.
Вопрос tcpclient вещать в поток или отрисовку?
Попробовал tcpclient засунуть в поток, но ничего не выходит.
type
TMyThread = class(TThread)
Progress: string;
Client : TIdTCPClient;
procedure SetProgress;
constructor Create;
private
protected
procedure Execute; override;
end;
TRec_Data = record
Flag: array[0..20] of char;
end;
implementation
uses ClientForm;
constructor TMyThread.Create;
var
Rec: TRec_Data;
Buffer: TIdBytes;
begin
inherited Create(true);
Client := TIdTCPClient.Create(nil);
Client.Host := '127.0.0.1';
Client.Port := 6000;
Client.Connect;
// Передаем данные
if Client.Connected = True then
begin
Rec.Flag := 'addUser';
Buffer := RawToBytes(Rec, SizeOf(Rec));
Client.IOHandler.Write(Buffer);
end;
end;
procedure TMyThread.Execute;
var
Rec: TRec_Data;
Buffer: TIdBytes;
begin
while (Client.Connected) do
begin
Client.IOHandler.ReadBytes(Buffer, SizeOf(Rec));
BytesToRaw(Buffer, Rec, SizeOf(Rec));
Progress := Rec.Flag;
Synchronize(SetProgress);
end;
end;
procedure TMyThread.SetProgress;
begin
Form1.Memo1.Lines.Insert(0, Progress);
end;
При таком варианте поток отрабатывает сообщения с сервера, но видит выводит только первый ответ с сервера.
Помогите плиз...