From 8f486613be58ced269db1d437e560c16558604e8 Mon Sep 17 00:00:00 2001 From: becquet Date: Thu, 10 May 2007 18:49:20 +0000 Subject: Création de chuck, le programme du robot 2007. --- i/chuck/src/timer/Makefile.defs | 5 +++ i/chuck/src/timer/test_timer.cc | 47 ++++++++++++++++++++++ i/chuck/src/timer/timer.cc | 89 +++++++++++++++++++++++++++++++++++++++++ i/chuck/src/timer/timer.hh | 51 +++++++++++++++++++++++ 4 files changed, 192 insertions(+) create mode 100644 i/chuck/src/timer/Makefile.defs create mode 100644 i/chuck/src/timer/test_timer.cc create mode 100644 i/chuck/src/timer/timer.cc create mode 100644 i/chuck/src/timer/timer.hh (limited to 'i/chuck/src/timer') diff --git a/i/chuck/src/timer/Makefile.defs b/i/chuck/src/timer/Makefile.defs new file mode 100644 index 0000000..81a57e2 --- /dev/null +++ b/i/chuck/src/timer/Makefile.defs @@ -0,0 +1,5 @@ +PROGRAMS += test_timer + +timer_OBJECTS = timer.o + +test_timer_OBJECTS = test_timer.o $(timer_OBJECTS) diff --git a/i/chuck/src/timer/test_timer.cc b/i/chuck/src/timer/test_timer.cc new file mode 100644 index 0000000..2e8c502 --- /dev/null +++ b/i/chuck/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) +{ + using namespace std; + 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/i/chuck/src/timer/timer.cc b/i/chuck/src/timer/timer.cc new file mode 100644 index 0000000..662e6de --- /dev/null +++ b/i/chuck/src/timer/timer.cc @@ -0,0 +1,89 @@ +// 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. +void +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. +long long +Timer::getSystemTime (void) +{ + timeval tv; + gettimeofday (&tv, 0); + return ((long long) tv.tv_sec % 1000000) * 1000 + + (long long) tv.tv_usec / 1000; +} + +/// Constructeur. +Timer::Timer (void) +{ + programStart_ = getSystemTime (); + roundStart_ = -1; +} + diff --git a/i/chuck/src/timer/timer.hh b/i/chuck/src/timer/timer.hh new file mode 100644 index 0000000..341f1da --- /dev/null +++ b/i/chuck/src/timer/timer.hh @@ -0,0 +1,51 @@ +#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. +// +// }}} + +/// Classe de chronométrage. +class Timer +{ + long long 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 void 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 long long getSystemTime (void); + /// Constructeur. + Timer (void); +}; + +#endif // timer_hh -- cgit v1.2.3