QTimer Hintergrundinformationen
Verfasst: 21. April 2010 11:11
Hi,
Kann mir jemand genauer erklären, was im Hintergrund passiert, wenn mittels QTimer in regelmässigen abständen eine Funktion aufgerufen wird. Also wenn ich zb 2 ms einstelle. Was passiert in der Zwischenzeit - wird hier daweil der Thread/Prozess gewechselt oder nur im bestehenden Prozess/Thread abgewartet? Und was ist der Unterschied zum Aufruf von Sleep() oder Yield() (abgesehen natürlich jetzt davon dass durch Sleep()/Yield() keine Funktion aufgerufen wird). Ich meine hier wirklich was im Hintergrund passiert.
Zur genaueren Erklährung meines Problems:
Ich habe ein Programm in dem gleichzeitig (ein nicht von mir geschriebener) renderer verwendet wird. Dabei übergebe ich dem renderer gewisse Daten, er erstellt ein Bild dass ich wiederum auslesen kann.
Genauer will ich eine Reihe von Daten übergeben und ein Bild nach dem anderen auslesen. Das Problem dabei: der Renderer lauft auf der Grafikkarte und braucht immer ein Zeitchen bis dass Bild fertig ist. Erst dann kann ich es auslesen.
Bisher habe ich dass mit einem QTimer gelöst, der immer 2 ms wartet und dann die Funktion zum auslesen des bildes aufruft. Das Funktioniert zwar ist aber umständlich.
Jetzt wollte ich das einfacher mit einer for Schleife lösen die einfach in jedem Durchlauf die Daten setzt, kurz abwartet bis das Bild fertig ist und es dann ausliesst. Das warten habe ich probiert mit einem Sleep() call zu machen. Oder auch mit einer QWaitCondition die ich einfach austimen ließ. Das Problem ist, dass scheinbar trotz warten in der Zwischenzeit der Renderer nicht zum Zug kommt. Scheinbar wird der Prozess/Thread in der zwischenzeit nicht gewechset vom Scheduler(glaube ich halt).
Mir ist dabei nicht klar warum der Vorgang mit dem QTimer funktioniert, aber wenn ich Sleep()/Yield() aufrufe der Renderer nie dranzukommen scheint. Daher meine oben gestellte Frage.
thx und lg scr
Kann mir jemand genauer erklären, was im Hintergrund passiert, wenn mittels QTimer in regelmässigen abständen eine Funktion aufgerufen wird. Also wenn ich zb 2 ms einstelle. Was passiert in der Zwischenzeit - wird hier daweil der Thread/Prozess gewechselt oder nur im bestehenden Prozess/Thread abgewartet? Und was ist der Unterschied zum Aufruf von Sleep() oder Yield() (abgesehen natürlich jetzt davon dass durch Sleep()/Yield() keine Funktion aufgerufen wird). Ich meine hier wirklich was im Hintergrund passiert.
Zur genaueren Erklährung meines Problems:
Ich habe ein Programm in dem gleichzeitig (ein nicht von mir geschriebener) renderer verwendet wird. Dabei übergebe ich dem renderer gewisse Daten, er erstellt ein Bild dass ich wiederum auslesen kann.
Genauer will ich eine Reihe von Daten übergeben und ein Bild nach dem anderen auslesen. Das Problem dabei: der Renderer lauft auf der Grafikkarte und braucht immer ein Zeitchen bis dass Bild fertig ist. Erst dann kann ich es auslesen.
Bisher habe ich dass mit einem QTimer gelöst, der immer 2 ms wartet und dann die Funktion zum auslesen des bildes aufruft. Das Funktioniert zwar ist aber umständlich.
Jetzt wollte ich das einfacher mit einer for Schleife lösen die einfach in jedem Durchlauf die Daten setzt, kurz abwartet bis das Bild fertig ist und es dann ausliesst. Das warten habe ich probiert mit einem Sleep() call zu machen. Oder auch mit einer QWaitCondition die ich einfach austimen ließ. Das Problem ist, dass scheinbar trotz warten in der Zwischenzeit der Renderer nicht zum Zug kommt. Scheinbar wird der Prozess/Thread in der zwischenzeit nicht gewechset vom Scheduler(glaube ich halt).
Mir ist dabei nicht klar warum der Vorgang mit dem QTimer funktioniert, aber wenn ich Sleep()/Yield() aufrufe der Renderer nie dranzukommen scheint. Daher meine oben gestellte Frage.
thx und lg scr