Перейти к содержанию
Fire Monkey от А до Я

rust gg

Пользователи
  • Постов

    2
  • Зарегистрирован

  • Посещение

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

Достижения rust gg

  1. отрисовку я не вызываю на каждый пакет, она происходит в таймере и в таймере же происходит принятия пакетов с сервера и тут возникает очередь (это вариант без потока) "поток отрабатывает сообщения с сервера" - например сервер шлет три сообщения с разными flag, а в мемо попадает три раза одно и тоже, самое первое. Перенесу, но от этого ничего не меняется.
  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; При таком варианте поток отрабатывает сообщения с сервера, но видит выводит только первый ответ с сервера. Помогите плиз...
×
×
  • Создать...