2010-12-22 11 views
5

In Qt Anwendungscode Class A hat eine Mitgliedsmethode wie method1(). Ich möchte diese Methode in einer anderen Elementfunktion method2() aufrufen und mehtod1() in einem anderen Thread ausführen. Aber was ich in der QT-Dokumentation gefunden habe, folgt.Ausführen einer Funktion in einem anderen Thread in QT

  1. Inherit ein neues class MyThread (annehmen) von QThread.
  2. Überschreiben Sie die Funktionsmethode run() mit Ihrem erforderlichen Code.
  3. Erstellen Sie ein Objekt MyThread in Class A und rufen Sie dann die run-Funktion, wo immer Sie möchten.

Aber das oben genannte scheint etwas komplex. Gibt es einen Mechanismus in Qt, so dass ich eine neue QThread (ohne erben) sofort in meinem method1() erstellen und die method2() mit diesem Thread ausführen und dann nach Beendigung der Ausführung zu method1() zurückkehren kann?

Bitte lassen Sie mich wissen, wenn ich in meiner Frage nicht klar bin.

Antwort

3

Sie können QObject-Slots und -Signale oder Event-Unterstützung in Kombination mit Threads verwenden.

Grundsätzlich werden die QObject-Slots, die durch den Signal/Slot-Mechanismus aufgerufen werden, im Thread ausgeführt, der das QObject erstellt hat. Sie können den Objektbesitz auch mithilfe von QObject :: moveToThread von einem Thread in einen anderen verschieben.

Sie können auch QCoreApplication :: postevent schreiben Ereignisse zur Ausführung im Thread das Objekt erstellt wurde.

Sehen Sie mehr über Themen und QObjects in Qt Dokumentation ("Threads und QObjects" in Index) verwenden.

Gehen Sie zu Ihrem Problem, können Sie zwei separate Objekte in verschiedenen Threads verwenden, um die Ausführung zu "verbreiten".

10

Ja, es gibt einen Weg, wie Sie wollen.

Dieser Artikel wird Ihnen helfen, zu verstehen, warum es nicht die von QThread zu erben richtigen Weg ist: http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/

Dieser Artikel wird Ihnen helfen, zu wissen, wie QThread einfache Art und Weise in einem echten verwenden: http://blog.qt.digia.com/blog/2006/12/04/threading-without-the-headache/

+2

so warten, Im Grunde sagt mir der Autor in dem ersten Link, den ich zur Verfügung gestellt habe, NICHT, von QThread abzuleiten, und im zweiten Link erklärt mir ein anderer Autor, wie einfach Qt-Threads sind, wenn ich QThread unterlasse. Ich bin jetzt ein wenig verwirrt, aber danke für die Links trotzdem;) +1 – Hafnernuss

+0

Nicht genau. Der erste Artikel erklärt, warum QThread in diesem Fall nicht vererbt werden sollte und der zweite erklärt, wie man die QThread-Klasse benutzt, ohne sie zu unterklassifizieren. –

+0

Entschuldigung, das ist mir aufgefallen. denke, es war zu früh für mich. Danke für die Klärung;) – Hafnernuss

Verwandte Themen