-
Постов
2 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные rust gg
-
-
Здравствуйте.
На клиенте происходит прием и отрисовка (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;
При таком варианте поток отрабатывает сообщения с сервера, но видит выводит только первый ответ с сервера.
Помогите плиз...
Поток на клиенте
в TIdTCPClient
Опубликовано · Изменено пользователем rust gg
отрисовку я не вызываю на каждый пакет, она происходит в таймере и в таймере же происходит принятия пакетов с сервера и тут возникает очередь (это вариант без потока)
"поток отрабатывает сообщения с сервера" - например сервер шлет три сообщения с разными flag, а в мемо попадает три раза одно и тоже, самое первое.
Перенесу, но от этого ничего не меняется.