From f8f8ea508d94bffbfcfed734956359a785ec6625 Mon Sep 17 00:00:00 2001 From: schodet Date: Wed, 9 Feb 2005 17:56:44 +0000 Subject: Ajout de timer. --- 2005/i/robert/src/timer/Makefile.defs | 7 +++ 2005/i/robert/src/timer/test_timer.cc | 47 ++++++++++++++++++ 2005/i/robert/src/timer/timer.cc | 90 +++++++++++++++++++++++++++++++++++ 2005/i/robert/src/timer/timer.hh | 50 +++++++++++++++++++ 4 files changed, 194 insertions(+) create mode 100644 2005/i/robert/src/timer/Makefile.defs create mode 100644 2005/i/robert/src/timer/test_timer.cc create mode 100644 2005/i/robert/src/timer/timer.cc create mode 100644 2005/i/robert/src/timer/timer.hh (limited to '2005/i/robert/src/timer') diff --git a/2005/i/robert/src/timer/Makefile.defs b/2005/i/robert/src/timer/Makefile.defs new file mode 100644 index 0000000..0235646 --- /dev/null +++ b/2005/i/robert/src/timer/Makefile.defs @@ -0,0 +1,7 @@ +PROGRAMS += test_timer + +timer_OBJECTS = timer.cc + +test_timer_OBJECTS = test_timer.o $(timer_OBJECTS) + +test_timer: $(test_timer_OBJECTS) diff --git a/2005/i/robert/src/timer/test_timer.cc b/2005/i/robert/src/timer/test_timer.cc new file mode 100644 index 0000000..4a2296b --- /dev/null +++ b/2005/i/robert/src/timer/test_timer.cc @@ -0,0 +1,47 @@ +// test_timer.cc +// robert - programme du robot 2005. {{{ +// +// Copyright (C) 2005 Nicolas Schodet +// +// Robot APB Team/Efrei 2005. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} +#include "timer.hh" + +#include +#include + +int +main (void) +{ + sleep (2); + cout << "timer 0 " << Timer::getProgramTime () << ' ' << + Timer::getRoundTime () << endl; + sleep (1); + cout << "timer 1 " << Timer::getProgramTime () << ' ' << + Timer::getRoundTime () << endl; + Timer::startRound (); + sleep (2); + cout << "timer 3 " << Timer::getProgramTime () << ' ' << + Timer::getRoundTime () << endl; + Timer::wait (1500); + cout << "timer 4.5 " << Timer::getProgramTime () << ' ' << + Timer::getRoundTime () << endl; + return 0; +} diff --git a/2005/i/robert/src/timer/timer.cc b/2005/i/robert/src/timer/timer.cc new file mode 100644 index 0000000..970a648 --- /dev/null +++ b/2005/i/robert/src/timer/timer.cc @@ -0,0 +1,90 @@ +// timer.cc +// robert - programme du robot 2005. {{{ +// +// Copyright (C) 2005 Nicolas Schodet +// +// Robot APB Team/Efrei 2005. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} +#include "timer.hh" + +#include +#include + +/// Retourne le temps depuis le début du programme en millisecondes. +int +Timer::getProgramTime (void) +{ + Timer &timer = getInstance (); + return getSystemTime () - timer.programStart_; +} + +/// Retourne le temps depuis le début du match en millisecondes. +int +Timer::getRoundTime (void) +{ + Timer &timer = getInstance (); + return timer.roundStart_ != -1 ? getSystemTime () - timer.roundStart_ : 0; +} + +/// Démare le match et enregistre le temps de départ. +int +Timer::startRound (void) +{ + Timer &timer = getInstance (); + timer.roundStart_ = getSystemTime (); +} + +/// Attend un nombre de millisecondes. Attention, le robot ne fait absolument +/// rien pendant cette periode ! +void +Timer::wait (int t) +{ + timespec ts, r; + ts.tv_sec = t / 1000; + ts.tv_nsec = (t % 1000) * 1000000; + nanosleep (&ts, &r); +} + +/// Retourne une référence vers l'instance unique. +Timer & +Timer::getInstance (void) +{ + static Timer instance; + return instance; +} + +/// Retourne la date système. +int +Timer::getSystemTime (void) +{ + timeval tv; + gettimeofday (&tv, 0); + // Ça veut dire, un bug tous les 11 jours... + // XXX Attention, si le robot est à l'heure, on peut mal tomber. + return (tv.tv_sec % 1000000) * 1000 + tv.tv_usec / 1000; +} + +/// Constructeur. +Timer::Timer (void) +{ + programStart_ = getSystemTime (); + roundStart_ = -1; +} + diff --git a/2005/i/robert/src/timer/timer.hh b/2005/i/robert/src/timer/timer.hh new file mode 100644 index 0000000..4c41b0e --- /dev/null +++ b/2005/i/robert/src/timer/timer.hh @@ -0,0 +1,50 @@ +#ifndef timer_hh +#define timer_hh +// timer.hh +// robert - programme du robot 2005. {{{ +// +// Copyright (C) 2005 Nicolas Schodet +// +// Robot APB Team/Efrei 2005. +// Web: http://assos.efrei.fr/robot/ +// Email: robot AT efrei DOT fr +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// }}} + +class Timer +{ + int programStart_, roundStart_; + public: + /// Retourne le temps depuis le début du programme en millisecondes. + static int getProgramTime (void); + /// Retourne le temps depuis le début du match en millisecondes. + static int getRoundTime (void); + /// Démare le match et enregistre le temps de départ. + static int startRound (void); + /// Attend un nombre de millisecondes. Attention, le robot ne fait + /// absolument rien pendant cette periode ! + static void wait (int t); + private: + /// Retourne une référence vers l'instance unique. + static Timer &getInstance (void); + /// Retourne la date système. + static int getSystemTime (void); + /// Constructeur. + Timer (void); +}; + +#endif // timer_hh -- cgit v1.2.3