timer
-
Moin moin,
ich brauche sowas wie time(NULL). Nur das dieser Timer deutlich genauer sein soll.
Den Timer benötige ich für mein erstes Spiel in ncurses(space invaders). Wenn ich KEY_SPACE, KEY_RIGHT , KEY_LEFT oder keine Taste drücke, soll der Timer aufgerufen werden, der eine "Start_timer_variable" definiert. Danach soll wieder überprüft werden ob der User irgendetwas eingegeben oder nichts eingegeben hat. Daraufhin soll wieder der Timer aufgerufen werden, um zu überprüfen ob die vergangene Zeit >= 0.1 Sekunden ist. Wenn NICHT, wird wieder der user input ausgewertet und das ganze geht von vorne los. WENN die vergangene Zeit >= 0.1 sekunden ist, soll eine Variable inkrementiert werden. Danach soll die "Start_timer_variable" wieder neu defineirt werden. Dann wiederholt sich alles.
Wie würded/würden Ihr/Spieleprogrammierer dieses Problem lösen? Ich konnte auf http://ninvaders.sourceforge.net/ in den Quelldatein keinen Timer ausfindig machen.Bevor der Server c-plusplus.net down war hatte ich einen ähnlichen Thread aufgemacht. Allerdings wurde dieser gelöscht weshalb ich hier einen neuen Thread aufgemacht habe. Und ja es soll ncurses sein Distri : Debian
-
#ifndef STOPWATCH_HPP #define STOPWATCH_HPP #include <chrono> template <typename Clock = std::chrono::steady_clock> class stopwatch { public: typedef Clock clock; typedef typename clock::time_point time_point; typedef typename clock::duration duration; private: time_point last_; public: stopwatch() : last_(clock::now()) {} void reset() { *this = stopwatch(); } time_point now() const { return clock::now(); } duration elapsed() const { return now() - last_; } duration tick() { time_point dummy; return tick(dummy); } duration tick(time_point& now_) { now_ = now(); auto elapsed = now_ - last_; last_ = now_; return elapsed; } }; typedef stopwatch<> default_stopwatch; template <typename T, typename Rep, typename Period> T duration_cast(const std::chrono::duration<Rep, Period>& duration) { return duration.count() * static_cast<T>(Period::num) / static_cast<T>(Period::den); } #endif // cpp file #include <iostream> #include <thread> int main() { default_stopwatch sw; for (unsigned i = 0; i != 50; ++i) { std::this_thread::sleep_for(std::chrono::milliseconds(77)); std::cout << duration_cast<double>(sw.elapsed()) << '\n'; } }
-
C++11: http://en.cppreference.com/w/cpp/chrono/high_resolution_clock
Boost: http://www.boost.org/doc/libs/1_34_0/doc/html/date_time/posix_time.html
POSIX: http://www.tin.org/bin/man.cgi?section=3&topic=clock_gettime
C: http://en.cppreference.com/w/cpp/chrono/c/clock
Assembler: http://en.wikipedia.org/wiki/Time_Stamp_CounterBeachte den Unterschied zwischen Echtzeit, CPU-Zeit und Prozesszeit.
Google (hätte alle diese Links enthalten): Google: high resolution timer linux
-
Da du von Spieleentwicklung sprichst, werfe ich mal SFML in den Raum.
sf::Clock clock; ... sf::Time time = clock.getElapsedTime(); std::cout << "Zeit: " << time.asMilliseconds() << std::endl;