Raspberry - Qt - Multithreading

OP #5358973
Lesenswert?
• ▲
▼
Hallo,

folgendes Problem: Ich programmiere eine Anwendung auf dem Raspberry Pi 
32 mit Qt. Es gibt einen GUI Thread (QThread), der einen weiteren Thread 
erstellt. Letzterer ist für polling der GPIOs zuständig. Über das 
event-system updated er eine Status Zeile in der GUI.

Wenn ich in der GUI auf einen Button "Scannen" klicke started der 
polling Thread. Ich bekomme auch verschiedene Thread IDs. Auch kann ich 
während des Scannens die GUI weiter bedienen. Allerdings ruckelt sie 
sehr und bis weitere Klicks auf andere Buttuns übernommen werden dauert 
es teilweise mehrere Sekunden.

Auf der Konsole (htop) sehe ich auch dass erst 1 Kern auf ~100% ist. 
Nachdem dann der 2. Thread startet sind auch zwei Kerne auf ~100%. Somit 
sollte jeder Thread eigentlich auch jeweils einen Kern zur Verfügung 
haben. Woher kommt dann das Ruckeln?
Gast #5358989
Lesenswert?
• ▲
▼
Überdenk dein Konzept. Polling mit 100% CPU ist sehr suboptimal 
(vorsichtig ausgedrückt).
Und, falls du in deiner Polling-Loop auch ständig mit QT interagierst, 
kann es sein dass du über das dafür nötige Locking dir auch den 
GUI-Thread behinderst.
OP #5359004
Lesenswert?
• ▲
▼
Ich bin ein Dödel... Die Updaterate (emit signal für GUI) war zu hoch. 
Ich Update jetzt nur noch wenn es nötig ist und nun funktioniert alles 
hervorragend.

Schwarzseher schrieb:
> Überdenk dein Konzept. Polling mit 100% CPU ist sehr suboptimal
> (vorsichtig ausgedrückt).

Ähm joa. Ich lese Daten von einem ADC (16 parallele Leitungen + Clk) mit 
100kHz aus. Dazu muss ich die GPIOs übersamplen um die Clk flanken zu 
ermitteln um dann die 16 restlichen Bits in ein Array abspeichern. Das 
Sample- und Clocksignal werden von einem separaten Mikrokontroller 
erzeugt damit ich wenig Jitter bekomme.

Letztendlich hab ich keine besonders tolle Hardware designed. Ist auch 
nur ein Prototyp. Eigentlich wollte ich so einen FPGA einsparen. In der 
nächsten Version mach ich das definitiv anders.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.