Perché non è possibile chiamare la funzione di avvio di una classe da dentro di sé?
-
09-10-2019 - |
Domanda
sono totalmente nuovo per la programmazione con fili, e poiché la classe usa qthreads, sto chiedendo perché non posso chiamare funzione start
di un QThread dall'interno stessa e avere la sua funzione run
inizia l'esecuzione indipendentemente altro thread (il programma sembra bloccarsi quando faccio questo). Invece, devo chiamare la funzione di avvio da dove l'oggetto è stato dichiarato. Perché è questo?
Alcuni codice:
class ClassWithThread : public QThread
{
public:
ClassWithThread() {}
someFunction() {start();}
run()
{
//do some stuff here
}
}
Questo è fondamentalmente ciò che fa la mia classe. Quando chiamo someFunction
il programma si blocca. Se rimuovo la dichiarazione start
da someFunction
però, e chiamata start
dal di fuori del programma, allora funziona benissimo.
Soluzione
QThread
dovrebbe essere derivata solo se si desidera estendere la capacità filo, di non specializzarsi per il vostro lavoro come questo. Questo articolo aiuterebbe a capire la utilizzare di QThread
.
Quindi, è necessario creare un QThread e avviarlo dall'esterno e quindi spostare un oggetto in modo che farà il lavoro. Leggere questo esempio: http: //labs.qt. nokia.com/2006/12/04/threading-without-the-headache/
La speranza che aiuta a evitare questo tipo di problema