2016-04-05 6 views
0

Während der Laufzeit bekomme ich die Fehlermeldung: "pure vitual function called".QThreadPool ruft reine virtuelle Funktion der Elternklasse auf QRunnable

QThreadpool scheint Bm die pure virtual void run() der Elternklasse QRunnable, anstatt aus void run() in der abgeleiteten Klasse zu nennen. Seltsamerweise, wenn ich die Funktion manuell mit b_1.run(); aufrufen, gibt es kein Problem während der Laufzeit.

Hier ist meine Klasse implentation:

class Bm : public QRunnable 
{ 
    public: 
    void run() 
    { 
     test(); 
    } 
    private: 
     void test(); 
}; 

Hier ist meine Hauptfunktion, wo der Fehler passiert.

int main() 
{ 
    QThreadPool pool; 
    pool.setMaxThreadCount(1); 
    BM b_1; 

    pool.start(&b_1); 

    return 0; 
} 

Meine Frage: Warum tut Qthreadpool Bm::run() über QRunnble::run() verwenden?

+1

Versuchen Sie, pool.waitForDone() aufzurufen, bevor Sie von main() zurückkehren. Sieht aus wie b_1 gelöscht wird, bevor der Thread gestartet wird ... – Archie

+0

Danke. Das hat funktioniert. Wie hadle ich das jetzt? lösche ich die Frage, weil die Antwort auf mein Problem trivial erscheint oder sollte es eine gepostete Antwort geben? – FruitSokrat

+0

Ich denke, Ihre Frage ist absolut gültig und kann jemand anderem helfen. – Archie

Antwort

1

Die Thread-Objekte werden gelöscht, wenn Sie aus dem Funktionsbereich main() gehen, noch bevor die QThreadPoolIRunnable::run() ruft. Die Verwendung von QThreadPool::waitForDone() vor der Rückkehr gewährleistet, dass der Thread ausgeführt wird.

Verwandte Themen