Ich habe einen Prozess, der Abfragt ob ein Gerät eine Position erreicht hat (While Schleife). Das führt wie gewollt dazu das der Code erst dann weiter ausgeführt wird wenn das Gerät angekommen ist. Hat aber den Nachteil das die Applikation blockiert ist. Jetzt würde es mir ausreichen wenn zwischendurch die Events abgefragt würden.
Ein extra Thread wäre hier keine Lösung, weil ich damit genau nicht verhindert würde das der darauffolgende Code ausgeführt wird.
In Arbeitsintesiver Schleife Events abfragen
Naja und was passiert wenn das Gerät die position nicht erreicht???
Aber mach doch einfach zu beginn/Ende nen
allerdings wäre es sinnvoller nen Signal auszulösen wenn das Gerät die Position hat bzw das in nen Thread laufen zu lassen. Eine blockierende while schleife ohne abbruchbedingung is ne riesen gefahr!
Aber mach doch einfach zu beginn/Ende nen
Code: Alles auswählen
QApplication::processEvents()Doch: Wenn der Thread nen Callback hätte und erst dann der Code ausgeführt werden würde!Ein extra Thread wäre hier keine Lösung, weil ich damit genau nicht verhindert würde das der darauffolgende Code ausgeführt wird.
PollingIch habe einen Prozess, der Abfragt ob ein Gerät eine Position erreicht hat (While Schleife).
2 generelle moeglichkeiten, das auf ne eventschnittstelle zu mappen.
mit threads, wie AuE beschrieben hat. hat den Vorteil du kannst die prio des threades unabhaengig von dem der App / GUI thread bestimmen. das beschert dir nen kleinwenig dynamischeres verhalten wenn "viel" prozessorlast erzeugst, also das pollingintervall kann sich bei last ausserhalb vergroessern, ohne das deine gui gleich mit traege wird.
mit pseudothreading.
ne einfache whileschleife die mit processEvents() den focus abtreten laesst, is suboptimal. ganz einfach, weil damit nen Prozessorkern vollast rammeln laesst !
sleeps zur entlastung machen deine GUI zaeh ... weil klar, damit deine events von der gui auch verzoegerst.
besser die boerdmittel(windows) aka Timer nutzen ...
meist brauchst eh nur nen groesseres pollinterval ...
einfach nen timer aufziehen, und in der timer methode die posi abfragen. wenn die stimmt, event fueren -> weiteren code ausfuehren ...
Ciao ...