Sono di fronte a un problema tra il punto in cui è necessario mantenere la mia interfaccia utente (e il sistema operativo completo) reattiva nell'applicazione multi-thread.Come mantenere l'interfaccia utente reattiva quando il carico della CPU è al 100% (principalmente utilizzando C++ e Qt)?
Sto sviluppando un'applicazione (basata su C++ e Qt) che ha ricevuto e trasformato il lotto di frame video da più stream allo stesso tempo.
Ogni flusso viene recuperato, trasformato e sottoposto a rendering in un thread di lavoro separato (utilizzando DirectX). Ciò significa che non sto utilizzando il thread GUI predefinito per il rendering del frame.
Su un computer potente non ho alcun problema perché la cpu può elaborare tutti i dati e mantenere il tempo per il thread GUI per elaborare la richiesta dell'utente. Ma su un vecchio computer, non funziona, la CPU viene utilizzata al 100% per elaborare i miei dati, e l'interfaccia utente è in ritardo, potrebbero volerci 10 secondi prima che un clic del pulsante venga elaborato.
Vorrei mantenere la mia interfaccia utente reattiva. In effetti, voglio che il mio thread di lavoro funzioni solo se non ci sono altre azioni da fare. Ho provato a cambiare la priorità del thread di lavoro a bassa, ma non funziona. Ho anche provato un sleep (10) nel thread di lavoro, ma poiché posso avere un sacco di thread, non cadono nel sonno allo stesso tempo, quindi non funziona neanche.
Qual è il modo migliore per mantenere una UI reattiva in quel caso (qualunque sia il toolkit utilizzato)?
Sembra che si stiano creando troppi thread. –
si dovrebbe rendere i thread di lavoro con priorità più bassa dei thread che gestiscono le richieste di interfaccia utente –
"Ho provato a modificare la priorità del thread di lavoro su bassa, ma non funziona." - ovviamente questo è il tipo di suggerimento che la tua domanda richiederà (e Ivor ha fornito), quindi MOSTRARE IL TUO CODICE E DESCRIVERE QUANTO AVEVA ANDATO SBAGLIATO. Separatamente, per la visualizzazione di video in tempo reale è normale aggiungere alcune righe di codice per misurare il tempo e se non si esegue il rendering dei fotogrammi in modo sufficientemente veloce, avviare il rendering in modo meno concorrente, eliminando alcuni fotogrammi; in alternativa, fare qualcosa per ridurre la risoluzione o la qualità del rendering. –