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()?

È stato utile?

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.

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