Warum kann ich aus sich selbst heraus nicht eine Startfunktion der Klasse nennen?
-
09-10-2019 - |
Frage
Ich bin total neu mit Threads zu programmieren, und da die Klasse QThreads verwendet, frage ich mich, warum ich kein QThread der start
Funktion aus sich selbst anrufen und haben ihre run
Funktion starten unabhängig von einem anderen Thread ausgeführt wird (das Programm zum Absturz zu bringen scheint, wenn ich dies tun). Stattdessen muss ich von der Startfunktion aufrufen, wo das Objekt deklariert wurde. Warum ist das?
Einige Code:
class ClassWithThread : public QThread
{
public:
ClassWithThread() {}
someFunction() {start();}
run()
{
//do some stuff here
}
}
Das ist im Grunde, was meine Klasse tut. Als ich rufe Sie die Programmabstürze someFunction
. Wenn ich die start
Aussage von someFunction
aber, und Anruf start
von außerhalb des Programms entfernen, dann funktioniert es gut.
Lösung
QThread
sollte nur abgeleitet werden, wenn Sie Thread-Fähigkeit erweitern wollen, es nicht so für Ihre Arbeit zu spezialisieren. Dieser Artikel würden Sie helfen, das zu verstehen, Verwendung von QThread
.
So haben Sie eine QThread erstellen müssen und es von außen beginnen und dann ein Objekt, um es zu bewegen, die den Job machen werden. Lesen Sie dieses Beispiel: http: //labs.qt. nokia.com/2006/12/04/threading-without-the-headache/
Hoffnung, dass diese Art von Problem zu vermeiden hilft