C ++ Распределение данных между несколькими очередями TS - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь распределить поток данных по клиентам многопоточного экземпляра сервера, клиентские потоки должны только читать.Это означает, что у меня есть поток, из которого поступают данные, и все остальные потоки должны прочитать эти данные (им больше не нужно их изменять), чтобы они могли отправлять данные клиентам.Для очереди я использую это: https://blog.chrisd.info/a-simple-thread-safe-queue-for-use-in-multi-threaded-c-applications/ шаблон класса.

Мой подход заключается в создании списка очередей и отправке данных во все из них.Поэтому я могу прочитать их в клиентском потоке (одна очередь для одного клиентского потока).

Создание списка:

ThreadSafeQueue<std::string> sq[50];

Постановка данных во все очереди:

for (i=0; i<50; i++)
{
sq[i].enqueue(buffer);
}

Удаление данных из одной очереди на поток:

size = sq[local_thread_count].dequeue(res);

Здесь вы можете найти весь код src здесь

Каждый клиентский поток имеет posixпоток (clientHandler) , который не делает ничего, кроме удаления из очереди и последующей отправки информации клиенту, информация помещается в очередь другим pthread (gpsDataStream) , который считывает информацию изпоследовательный интерфейс, а затем ставит его во все очереди.Все потоки создаются в основной функции :

Переменная local_thread_count увеличивается на единицу и передается в качестве параметра при создании потока клиента.Он существует, поэтому каждый поток удаляется из другой очереди.

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

...