Выходной двоичный буфер с STL - PullRequest
1 голос
/ 26 августа 2010

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

Какой лучший способ сделать это с STL? Я ищу что-то вроде std :: queue, но одновременно для многих элементов.

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 августа 2010

Я нуждался в такого рода вещах для системы сетевых коммуникаций в многопоточной среде.

В моем случае я просто обернул std :: queue объектом, который обрабатывал блокировку (std :: queue, вообще говоря, не является потокобезопасным). Объекты в очереди были просто очень легкими обертками над массивами в стиле char *.

Эти оболочки также предоставили следующие функции-члены, которые я считаю чрезвычайно полезными.

insertByte(unsigned int location, char value)
insertWord(unsigned int location, int value)
insertLong(unsigned int location, long value)
getByte/Word/Long(unsigned int location)

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

Были некоторые немного странные вещи, которые мы делали с кусками двоичных данных размером более 4 байтов, что, как я думал в то время, помешало бы нам использовать std :: vector, хотя в эти дни я просто использовал его и поэкспериментируйте с & vector [x].

2 голосов
/ 26 августа 2010

Что означает «двоичные данные»?Просто буферы памяти?Вы хотите иметь возможность вставлять / выгружать по одному буферу за раз?Затем вы должны обернуть буфер в класс или использовать std::vector<char> и вставить / вытолкнуть их на std::deque.

...