Wie verwende ich ein QObject sowohl QThread und Mainthread, um zu vermeiden „glibc Doppel frei oder Korruption (fasttop) festgestellt:“

StackOverflow https://stackoverflow.com/questions/2330329

  •  22-09-2019
  •  | 
  •  

Frage

Ich habe eine QThread, die einen UDP-Socket zu schreiben verwendet und lesen Datagramme in einer Schleife. die QUdpSocket in dem Mainthread erstellt. Wie gehe ich mit QObjects, dass ich sowohl in der QThread und Mainthread verwenden. Auch ist es in Ordnung, den UDP-Socket im Mainthread zu haben und es im QThread verwenden?

War es hilfreich?

Lösung

Normalerweise sollten Sie nur ein Thread ermöglichen, mit jedem QObject zu beschäftigen. In diesem Fall würden Sie wahrscheinlich Ihre QThread halten haben und die QUdpSocket zu verwenden, und der Haupt-Thread wäre es nicht immer berühren (idealerweise der Haupt-Thread sollte nicht einmal einen Zeiger auf die QUdpSocket abhalten, nur Sie sicher zu sein, nie vergessen und versehentlich ein Verfahren auf sie aus dem falschen Thread nennen).

Wenn Ihr QThread einige UDP Daten liest, kann es eine beliebige anfängliche Verarbeitung auf es tun, dann die Daten übergeben, um den Haupt-Thread über QApplication :: postevent () oder über eine Warteschlange eingereiht Signal / Schlitzverbindung.

Und falls Ihr Haupt-Thread einige Daten hat, dass er möchte als ein UDP-Paket gesendet werden, sollte es nicht nennen write () auf dem QUdpSocket Objekt direkt; stattdessen sollte es die QThread (via postevent () oder eine Warteschlange Signal) benachrichtigen und lassen Sie die QThread damit umgehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top