Zeitmessen
-
Hi,
ich hab nen OpenGL programm. Wie kann da jetzt von dem GLfloat alpha immer 0.1f abziehen? Also ich mein damit dass es nich so fix geht weil wenn ich ja alpha -=0.1f; nehm is er ganz schnell bei 0.0f. Ich habs schon mit sleep() versucht, aber das blockt die ganze anwendung. gibts da irgendeine möglichkeit? z.B eine Timer library oder so...MfG
NicoPS: DANKE AN ALLE HELFER!!!
-
sry aber kapier nicht was du willst, kannst dus nicht genauer beschreiben, oder hat das nichts mit Standard C++ zu tun (dann wärs kein Wunder, dass ichs nicht raff)
-
Also ich möcht in einem bestimmten Intervall von einer Variablen immer 0.1f abziehen. Bis diese Variable 0.0f hat.
MfG
Nico
-
Da schaust du mal bei Windows in die WinAPI. Bei Linux ken ich mich nicht aus.
Funktion heißt SetTimer.
-
Nico05105 schrieb:
Also ich möcht in einem bestimmten Intervall von einer Variablen immer 0.1f abziehen. Bis diese Variable 0.0f hat.
das kann echt schief gehen. womöglich wird die nie 0.0 wegen der rundungsfehler. nimm besser eine ganzzahl (int, long oder sowas)
oder du zählst runter bis '< 0.0'
-
Eine einfache Variante ist :
DWORD timeGetTime()
Die Differenz zwischen 2 Aufrufen ist die Zeit in Millisekunden. Ist in er windows.h mit drin.
-
Nur das problem is, wenn ich in ganzzahlschritten runterzähle, das nich viel bringt. Weil die Variable maximal 1.0f (GLfloat) groß is...und mit diesem SetTimer hab ich mich schon rumgeplagt..hat nich hingehaun..es muss doch irgendeine library geben, die so was macht, die eventuell sogar einen "fertigen" Timer hat..oder so was ähnliches..
MfG
Nico
-
du kannst ja auch nen thread machen der immer ne bestimmte zeit sleept und dann von der variable abzieht.
-
Mach halt nen int mit Anfangswert 10, zähl immer 1 runter, und teil zur Darstellung durch 10.0
-
Könnt mir mal bitte, jemand so nen kleines beispiel für so einen thread machen? Währe es super, super nett...
MfG
Nico
-
Mhh, ich würde sagen entweder du zählst in anderen Intervallen runter
1.000000f - 0.001f zum BeispielOder du schiebst das runterzählen in eine extra Funktion und rufst sie
meinetwegen aller 10 oder mehr Bilder auf.
Die Hauptschleife wiederholt sich ja dauerhaft.
-
also such mal im forum nach CreateThread (ist ne winapi-funktion, nicht portabel für linux usw. nur für win; infos gibts genug im forum oder bei msdn) oder nach boost::thread (kann man sich übrigens downloaden bei www.boost.org)... solltest du dich für boost entscheiden:
#include <boost/thread/thread.hpp> //... void func(void) { //Hier den Zähler reinbasteln } void startThread(void) { boost::thread(&func); // Hier wird ein thread gestartet } //...
kannst natürlich auch pthreads benutzen, einfach mal die forensuche bemühen oder googlen
mfg lars
-
Für sowas einen extra Thread zu machen, ist vollkommen überzogen und imo die falsche Strategie.
@Nico05105
Am besten du nimmst dafür einen non-blocking Timer. Der Tipp mit der Hauptschleife wurde ja auch schon genannt.
Generell ist die Vorgehensweise dann folgende: du speicherst dir die aktuelle Zeit (irgend ein System/Clock Tick) und schaust beim nächsten Durchlauf nach, ob die verstrichene Zeit grösser/gleich deinem gewünschten Intervall ist. Wenn nicht, dann wartest du einfach weiter. Wenn doch, dann zählst du deinen Alpha Wert runter und setzt den Timer zurück.
Wie man die Zeit messen kann, darüber gibts genügend Beiträge. Einfach mal die Forensuche bemühen (zb performance counter). Ua gibts da auch 'ne Stoppuhr Klasse von mir (chronometer), ist allerdings nicht mehr ganz aktuell.