From 4e5c530cd695b4c5807a16b017b3fa9ef1d61886 Mon Sep 17 00:00:00 2001 From: beaufour Date: Fri, 5 May 2006 18:28:27 +0000 Subject: Oui bon j'ai oublie de commite et ca compile. --- i/marvin/src/utils/signalhandler.tcc | 66 ++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 i/marvin/src/utils/signalhandler.tcc (limited to 'i/marvin/src/utils/signalhandler.tcc') diff --git a/i/marvin/src/utils/signalhandler.tcc b/i/marvin/src/utils/signalhandler.tcc new file mode 100644 index 0000000..04a1660 --- /dev/null +++ b/i/marvin/src/utils/signalhandler.tcc @@ -0,0 +1,66 @@ +// signalhandler.cc +// // // marvin - programme du robot 2006. {{{ +// // // +// // // Copyright (C) 2003-2006 Sebastien Beaufour +// // // +// // // Robot APB Team/Efrei 2006. +// // // 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 "signalhandler.hh" + +/// reset NEED a default reset, so here is a default reset with nothing inside +template void SignalHandler::DefaultReset (void) +{ + // Nothing +} + +// Now we can set the default value to reset +template Callback SignalHandler::reset=SignalHandler::DefaultReset; + +///Static member which will be use by sigaction +template void SignalHandler::trapsigint(int a) +{ + std::cout << "Trap du crtl+c "<< std::endl; + reset(); +} + +///Function to bind to the function to be called when signal il caught +template void SignalHandler::bind(Callback r) +{ + reset=r; + action.sa_handler = trapsigint; + action.sa_flags = SA_ONESHOT; + sigaction(sig,&action,NULL); +} + +/// Constructor, nothing to do +template SignalHandler::SignalHandler() +{ + //nada +} + +///Destructor, put the old sig handler back +template SignalHandler::~SignalHandler() +{ + sigaction(sig,&old,NULL); +} -- cgit v1.2.3