Перенос данных из вектора в очередь и выключение - PullRequest
0 голосов
/ 23 января 2020

У меня есть блок устаревшего кода, для которого я пытаюсь реализовать очередь. В целом, у меня есть функция приема сообщений в моем классе, которая выполняет следующее:

 void RCVER::receiveMessage(const std::vector<char> &incomingMessage) {
      int size = incomingMessage.size();
      msgQ.push(incomingMessage); 
      std::cout << "Received msg of size: " << size << std::endl; //THIS IS GOOD
      for(size_t i = 0; i < size-1; i++)
      {
         std::cout << incomingMessage[i] << std::endl; //DATA IS GOOD HERE
      }
  } 

Где msgQ определяется в заголовке как:

std::queue< std::vector <char> > msgQ;

Позже в Затем в своей цепочке обработки я пытаюсь вытолкнуть данные, которые я поместил в очередь, чтобы в конечном итоге отправить их через соединение TCP / IP. Код выглядит следующим образом:

void RCVER::getMessage(const char* data, int &bytes)
{
  std::vector<char> tmp;
  if(!msgQ.empty())
  {
    tmp = msgQ.front();
    bytes = tmp.size();
    data = &tmp[0];
    msgQ.pop();
    std::cout << "Pulled msg of size: " << bytes << " off of the queue." << std::endl; //THIS IS GOOD
    if(DEBUG)
    {
       for(size_t i = 0; i < bytes-1; i++)
       {
          std::cout << data[i] << std::endl; //NOT GOOD - PRINTS BLANK LINES
       }
  }
}

Моя проблема в том, что, когда я включаю флаг отладки, я просто печатаю пустые строки для размера данных. Размер правильный. Затем код просто отправляет данные, возвращаемые из getMessage, на вызов отправки TCP / IP. Что я делаю неправильно? Я действительно не вижу проблемы с кодом и просто хотел бы, чтобы еще один взгляд на него, чтобы увидеть, действительно ли с ним что-то не так.

У меня нет доступа к получателю TCP / IP, чтобы проверить, что он получает правильные сообщения.

PS Переменная tmp в getMessage была быстрым решением, так как я не смог вытащить вектор из очереди в одну строку. Если кто-то захочет сообщить мне о лучшем способе сделать это, я буду рад этому!

Кроме того, я не самый опытный программист. Я бы предположил, что делать это с шаблонами было бы очень легко, но я совсем не знаком с ними.

Компиляция с: gcc4.9.2, на Linux 2.6.32.

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