Delphi Очередь пула потоков - PullRequest
0 голосов
/ 13 марта 2020

Привет, можно найти пример для следующей задачи. Я подключаюсь к Webscocket и получаю сообщения. после получения сообщения я должен вставить его в базу данных и попытаться сделать это в пуле потоков очереди. в настоящий момент я делаю следующее, но я не думаю, что это основной способ сделать это.

           var MyStrings:Tstringlist;
             MyStrings:Tstringlist.create;


            //On Websocket message
           MyStrings.add(Message);


             //and in a Thread that always is Running i do 

      procedure TMythread.Execute;
      begin

      while true 
        begin

         if MyStrings.count>0 Then
         begin

          /////////////////////////////////////
          //database jobs 
          //with the string  MyStrings.strings(0)
         /////////////////////////////////////

         MyStrings.delete(0);
         end;


          end;
        end;

но таким образом я выполняю задания по очереди, как можно иметь 10 потоков одновременно обработать задачи и после 10 потоков завершить sh, чтобы вытолкнуть еще 10 строк из Mystrings, если они существуют, и обработать их до 10 отдельных потоков?

1 Ответ

1 голос
/ 13 марта 2020

Во-первых, вы должны сохранить обмен данными. Если у вас есть список, который будет изменяться (добавлять, удалять записи) в разных потоках, вам придется заблокировать ресурс.

Для очереди / пула потоков просмотрите ссылки ниже:

http://docwiki.embarcadero.com/Libraries/Rio/en/System.Threading.TTask http://docwiki.embarcadero.com/Libraries/Rio/en/System.Classes.TThread.Queue

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