Seite 1 von 1
In Arbeitsintesiver Schleife Events abfragen
Verfasst: 23. Januar 2009 13:57
von pospiech
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.
Verfasst: 23. Januar 2009 14:03
von franzf
Hilft die
void QCoreApplication::processEvents ( QEventLoop::ProcessEventsFlags flags = QEventLoop::AllEvents ) [static]
weiter?
Verfasst: 23. Januar 2009 14:05
von AuE
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!
Ein extra Thread wäre hier keine Lösung, weil ich damit genau nicht verhindert würde das der darauffolgende Code ausgeführt wird.
Doch: Wenn der Thread nen Callback hätte und erst dann der Code ausgeführt werden würde!
Verfasst: 23. Januar 2009 17:08
von RHBaum
Ich habe einen Prozess, der Abfragt ob ein Gerät eine Position erreicht hat (While Schleife).
Polling
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 ...