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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren