Problema
Ho un widget grafico della console che riceve l'output da un interprete. Sfortunatamente la console non è abbastanza veloce per dipingere l'output in tempo reale. Quindi ho dovuto implementare un buffer (FIFO Thread Safe Queue) che ritardava le scritture sulla console di 5 ms. Quindi, quando normalmente un ciclo di 1000 stampe sarebbe fatto in meno di 1 ms, ci vorrebbero 5000ms per stampare tutto.
Diagramma di sequenza per il buffer:
sendCode
: invia il codice che l'interprete può compilare ed eseguire.
writeLine
: scrivi l'output dall'interprete al buffer.
startTimer
: avvia un timer che va in timeout ogni 5 ms.
getLine
: recupera la riga più vecchia del buffer. Chiamato ogni 5 ms.
line
: riga che viene inviata alla console in cui viene visualizzata.
Che cosa ho bisogno
Mentre questa strategia di ritardare l'output funziona per ora, non è molto pratico quando sono necessarie soluzioni in tempo reale. Conosco un'altra strategia che consiste nell'impostare una dimensione del buffer. Quindi, quando viene raggiunta la dimensione del buffer, svuotare l'output. Questa è una strategia molto migliore in quanto la console non sarà soffocante considerando che le linee vengono inviate in blocchi.
Ma il problema è che se imposto una dimensione del buffer di 50 righe, l'utente non vedrà alcun output fino a quando non saranno stampate 50 righe. Ridurre la dimensione del buffer non è di grande aiuto, perché in questo caso si intende ridurre lo stress sulla console.
Come posso creare un sistema di buffer in modo che l'output venga stampato in tempo reale pur non avendo la console morire di me.