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?
Ü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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.