Einzelnen Beitrag anzeigen

Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Hat jemand Erfahrung mit Qt und Multithreading?

  Alt 11. Dez 2013, 20:17
Die Lösung heißt übrigens exec
Code:
class MyThread : public QThread
{
  Q_OBJECT
private:
  void run();
public:
  explicit MyThread (QObject *parent = 0);
};
Code:
MyThread::MyThread(QObject *parent) :
  QThread(parent)
{
}

void MyThread::run() {
  exec(); // Message-Loop starten
}
Anschließend kann man andere QObjects mit moveToThread dem Thread zuordnen, und die Signals und Slots für dieses Objekt laufen dann über die Thread-Message-Queue:
Code:
class MyObject : public QObject
{
  Q_OBJECT
public signals:
  void mySignal();
public slots:
  void MySlot();
}
Code:
  MyThread* thread = new MyThread();
  myThread->start();

  // Objekt a "läuft" im separaten Thread
  MyObject* a = new MyObject();
  a->moveToThread(thread);

  // Objekt b "läuft" im Main-Thread
  MyObject* b = new MyObject();

  connect(b, SIGNAL(mySignal()), a, SLOT(mySlot()));
Wenn b jetzt irgendwann mySignal() auslöst, dann ist das so, als ob b eine Message an a schickt (genauergesagt eine Thread-Message an den Thread, der sie wiederum ans richtige Objekt weiterleitet). Qt macht das alles automatisch.

*** gelöst ***
  Mit Zitat antworten Zitat