Threading in Qt: QThread

mercoledi 6 aprile 2016

Perchè threading?

Per eseguire contemporaneamente operazioni “sincrone”. Non ha senso per operazioni asincrone per le quali si arrangia Qt e/o il kernel a suddividere il lavoro su processi separati e la comunicazione avviene tramite segnali.

Due modi di implementare QThread

reimplementato (1) e come contenitore (2).

caso (1)

implemento una classe che eredita QThread e reimplemento la protected void run() nella quale eseguo un ciclo forever che esegue continuamente l'elaborazione desiderata. Questo ciclo sarà l'unico codice effettivamente spostato su un thread separato dall'applicazione principale. Per far partire il thread uso il metodo start(). La comunicazione può avvenire modificando in modo asincrono i dati privati della classe e prestando quindi attenzione alla loro consistenza (con “mutex lock”). Non è possibile comunicare ad eventi a meno che non si implementi manualmente tutta la gestione nel run(){}.

caso (2)

utilizzo un oggetto QThread come contenitore, mantenendo la gestione degli eventi che è già implementata di default. A questo punto posso spostare una classe in quel thread con il metodo moveToThread disponibile per ogni QObject. Tale classe comunica tramite segnali e slot “as usual”. Ricordarsi start() per far partire il thread e terminate() e wait() per terminarlo correttamente.

Oth

Iniziati a vedere alcuni esempi, ma ancora da provare bene a livello pratico.

Scusate l'assenza di riferimenti ma basta banalmente vedere la documentazione delle API Qt.

Navigazione

Table of contents

Contact

For any info you can write to:
Per qualunque info potete scrivere a:
info[at]maetech[dot]it

Ads

Stampa/Esporta
QR Code
QR Code talks:qthread (generated for current page)