Domanda
documentazione QThread::terminate()
afferma che è scoraggiato per terminare un thread chiamando questa funzione.
Nel mio programma, ho bisogno di terminare un thread prima che venga completata l'esecuzione. Il filo sta eseguendo qualche calcolo pesante e voglio all'utente di avere il controllo di smettere di calcolo.
Come posso fare che invece di chiamare QThread::terminate()
?
Soluzione
Impostare un flag dall'esterno del filo che viene controllato dal calcolo all'interno del filo e fermare il calcolo se è impostato il flag.
Altri suggerimenti
Utilizzando bandiere è un ovvio e il modo più comune per fare il trucco, ma se si sta lavorando su una piattaforma Linux / Unix vi consiglio di usare le pipe invece. Ho avuto lo stesso problema in cui ho usato una bandiera (questo rende il codice threadunsafe, e gli insetti derivanti da una tale bandiera sono difficili da rintracciare), poi ho cambiato l'attuazione di usare tubi che erano un modo efficace per fare il necessario.
Se si desidera, per una piattaforma Linux posso mostrarvi come utilizzare i tubi per terminare un QThread.
Si può anche avere finestre equivalente di tubi, che io non so molto di come io non ho fatto molto di programmazione su piattaforma Windows.
Spero che questo aiuti
La cosa migliore è utilizzare bandiera + mutex che renderà il filo soluzione sicura.