Forum: PC-Programmierung Raspberry - Qt - Multithreading


von M. M. (blackcow)


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?

von Schwarzseher (Gast)


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.

von M. M. (blackcow)


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.

von Schwarzseher (Gast)


Lesenswert?

M. M. schrieb:
> Ich lese Daten von einem ADC (16 parallele Leitungen + Clk) mit
> 100kHz aus.

Ohje. Mein Beileid.

Hätte sonst vorgeschlagen, die GPIOs mittels QSocketNotifier in die 
QT-Eventloop einzubinden, aber bei 100kHz ist das aussichtslos.

von Drrrtrr (Gast)


Lesenswert?

SPI ADC wäre da ja eher meine Wahl...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.