Domanda

Ho un flusso di dati che voglio mettere in un contenitore. Questo contenitore avrà dimensioni fisse o vincolato dinamicamente a una determinata dimensione in fase di esecuzione. Quest'ultimo può essere preferibile.

Quando il contenitore è pieno, i dati più vecchi verranno rimossi.

Voglio visualizzare questi dati usando un wxVListBox perché ho bisogno del pieno controllo del display. Tuttavia, c'è un problema: le chiamate a OnDrawItem non sono atomiche, il che significa che una volta che il contenitore è pieno, ogni chiamata OnDrawItem accederà ai dati in movimento, il risultato sarà un visualizzazione non contigua con elementi mancanti.

Questo è certamente vero con qualsiasi contenitore con indicizzazione simile a array nativo, richiesto da OnDrawItem .

Posso simulare l'indicizzazione simile ad array in una std :: map usando l'indicizzazione iteratore, se la chiave è un numero intero sequenziale, allora tutti gli elementi verranno ordinati e la mappa potrà essere potata abbastanza facilmente, ma sembra un trucco inefficiente.

Come posso risolvere questo? Altre idee o contenitori a cui non ho pensato?

È stato utile?

Soluzione

L'approccio migliore sembra essere quello di gestire pigramente lo stato completo del contenitore all'interno di OnDrawBackground . In questo modo l'interfaccia utente stessa assicura che i dati rimangano statici nelle chiamate successive a OnDrawItem , usando un deque come contenitore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top