Вопрос

У меня есть поток данных, который я хочу поместить в контейнер. Этот контейнер будет иметь фиксированный размер или динамически ограничен определенным размером во время выполнения. Последнее может быть предпочтительным.

Когда контейнер заполнен, самые старые данные будут удалены.

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

Это, безусловно, верно для любого контейнера с встроенной индексацией, подобной массиву, которая требуется OnDrawItem .

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

Как я могу решить это? Какие-нибудь другие идеи или контейнеры, о которых я не думал?

Это было полезно?

Решение

Лучшим подходом, похоже, является ленивое управление полным состоянием контейнера в OnDrawBackground . Таким образом, сам интерфейс гарантирует, что данные останутся статичными при последующих вызовах OnDrawItem , используя deque в качестве контейнера.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top