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

rust gg

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

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

  • Посещение

Сообщения, опубликованные rust gg

  1. отрисовку я не вызываю на каждый пакет, она происходит в  таймере и  в таймере же происходит принятия пакетов с сервера и тут возникает очередь (это вариант без потока)

    "поток отрабатывает сообщения с сервера" - например сервер шлет три сообщения с разными flag, а в мемо попадает три раза одно и тоже, самое первое.

    17 минут назад, kami сказал:

    Перенесите его создание и уничтожение (кстати - а где деструктор?) в Execute вашего потока.

    Перенесу, но от этого ничего не меняется.

  2. Здравствуйте.

    На клиенте происходит прием и отрисовка (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;

    При таком варианте поток отрабатывает сообщения с сервера, но видит выводит только первый ответ с сервера.

    Помогите плиз...

×
×
  • Создать...