delphi симуляция fifo с TStringList - PullRequest
0 голосов
/ 01 мая 2020

Мне нужно обработать полученные данные из tcp-ссылки. Эти данные представляют собой кадры шестнадцатеричной строки длиной 203 байта.

Я сохраняю их в конце списка tstringlist

MyList.Add( input );

и из второго потока прочитайте первую строку, обработайте ее и удалите из списка первый список

procedure TMyThread.Execute;
 var str : string;
begin
    while not Terminated do
    begin
      FTermEvent.WaitFor(100);
      if not Terminated then
      begin
          str := MyList[0];     
          MyList.Delete(0);
          //some process
      end;
    end
end;

Вопрос в том, безопасен ли этот поток?!

1 Ответ

0 голосов
/ 02 мая 2020

Если вы боитесь потерять входные данные, используя базу данных, вы можете попробовать использовать TThreadStringList. Я полагаю, что ваше программное обеспечение получает данные от нескольких устройств одновременно (и в этом случае вы должны создать многопоточный носок, чтобы убедиться, что вы получите все данные), если вы вместо этого получаете данные с одного устройства, вы должны убедиться, что протокол tcp поддерживает своего рода систему подтверждения, чтобы избежать потери данных или, по крайней мере, для сообщения в журнале данных, которые ваше приложение не смогло получить полностью.

В любом случае, TThreadStringList - это простая оболочка для TStringList. Это позволяет получить доступ к списку строк из разных потоков без каких-либо конфликтов. Я не могу проверить это, но для вас должно быть легко и быстро попробовать.

Ссылка: TThreadStringList

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...