Hi@all
Ich habe mir die Dokumentation zu QtConcurrent durchgelesen ,ich möchte vorweg aber mein Szenario erläutern...
Ich habe eine von QWidget abgeleitete Klasse in der ich bilder darstellen kann.(Diese wird selbstverständlich in der main erstellt und angesprochen)
über "addWindow(QMap<QString,QVariant>)" kann ich eine QMap an die klasse schicken.
In dieser QMap stehen informationen wie das Bild aussehen muss ...
Nun besitze ich aber einen 2ten Thread um Netzwerkpakete entgegenzunehmen aus dem ich die Qmap bekomme.
Mir ist klar dass ich nichts aus der Gui klasse über einen seperaten Thread ohne zusätzliche Mittel ansprechen kann.
Da kommt QtConcurrent ins Spiel.
mit QtConcurrent::run kann ich nun eine funktion aus einem anderem Thread aufrufen.
Da endet mein Verständnis , leider finde ich nur wenig brauchbare Informationen aus dem Netz.
Deswegen wollte ich hier mal nachfragen ob jemand eine Idee hat wie man so etwas realisiert.
Um es noch mal zusammenzufassen:
Ich besitze 2 Thread.
In Thread 2 bekomme ich die QMap ,diese muss an Thread 1 geschickt werden.
Ich würde mich freuen wenn da jemand ist der mir helfen kann bei diesem Problem weil ich keine Ahnung habe wie es jetzt weiter gehen soll.
QtConcurrent::run ,wie wirds benutzt ?
Code: Alles auswählen
::onNewMap(QMap myNewMap)
{
}
und
Code: Alles auswählen
emit mySignal(myNewMap);
Ich versteh momentan nur nicht, wozu du QtConcurrent brauchst. Was genau ist an Signals & Slots zu langsam?
Du schreibst "mit QtConcurrent::run kann ich nun eine funktion aus einem anderem Thread aufrufen". Imho ist es aber eher so, dass die übergebene Funktion in einem eigenen Thread (also nebenläufig) ausgeführt wird.
Du schreibst "mit QtConcurrent::run kann ich nun eine funktion aus einem anderem Thread aufrufen". Imho ist es aber eher so, dass die übergebene Funktion in einem eigenen Thread (also nebenläufig) ausgeführt wird.
ein zusätzliches problem ist dass die events(Signals ,Slots) nicht funktionieren ,ich weiß nicht woran es liegt und arbeite an einer Lösung.
leider darf ich nicht allzuviel vom programm ausplaudern
Edit:
also das Problem mit den Events scheint an der QueuedConnection zu liegen ,setze ich das enum auf diesen wert wird die aktion nie ausgeführt ... ,über DirectConnection habe ich das selbe Problem wie vorher ,ich kann ja nicht einfach Threads übergreifend Gui-Elemente ansprechen.
leider darf ich nicht allzuviel vom programm ausplaudern
Edit:
also das Problem mit den Events scheint an der QueuedConnection zu liegen ,setze ich das enum auf diesen wert wird die aktion nie ausgeführt ... ,über DirectConnection habe ich das selbe Problem wie vorher ,ich kann ja nicht einfach Threads übergreifend Gui-Elemente ansprechen.
Das Object in dem Thread, welches die Signale entgegennimmt, muss in dem Thread erstellt werden oder aber dorthin übergeben werden mit moveToThread(). Im Konstruktor vom Thread das Object zu erstellen reicht hier nicht aus, da er aus dem haupt Thread aufgerufen wird. Weiß ja nicht wie das bei dir aussieht, aber das Problem, wie du es beschreibst, hatte ich auch und wurde durch das Verschieben des Objects in den Thread gelößt.
Hoffe ich konnte helfen und hab nichts falsches erzählt
Hoffe ich konnte helfen und hab nichts falsches erzählt