![]() |
Hat jemand Erfahrung mit Qt und Multithreading?
Hi,
ich muss für ein Uniprojekt mit C++ und Qt arbeiten. Soweit so gut. Ich bin momentan von der Dokumentation zu QThreads allerdings etwas erschlagen. Was ich machen möchte, ist eigentlich einfach (Achtung, ich verwende jetzt Delphi/WinAPI-Vokabular): Ein Thread soll in einer Endlosschleife laufen und dabei jeweils auf eine Thread-Message warten und solange blockieren. Das ist erst mal alles. Die vertraute WinAPI kann ich unter C++ übrigens nicht benutzen, weil das ganze plattformunabhängig sein muss. Kann mir jemand einen Tipp geben, wie man das Beschriebene unter Qt am einfachsten mit Bordmitteln realisiert? Danke |
AW: Hat jemand Erfahrung mit Qt und Multithreading?
Die Lösung heißt übrigens
Delphi-Quellcode:
exec
Code:
class MyThread : public QThread
{ Q_OBJECT private: void run(); public: explicit MyThread (QObject *parent = 0); };
Code:
Anschließend kann man andere QObjects mit
MyThread::MyThread(QObject *parent) :
QThread(parent) { } void MyThread::run() { exec(); // Message-Loop starten }
Delphi-Quellcode:
dem Thread zuordnen, und die Signals und Slots für dieses Objekt laufen dann über die Thread-Message-Queue:
moveToThread
Code:
class MyObject : public QObject
{ Q_OBJECT public signals: void mySignal(); public slots: void MySlot(); }
Code:
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.
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())); *** gelöst *** |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz