00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef ARSIGNALHANDLER_H
00027 #define ARSIGNALHANDLER_H
00028
00029
00030 #include <list>
00031 #ifdef WIN32
00032 #else
00033 #include <signal.h>
00034 #endif
00035 #include "ariaTypedefs.h"
00036 #include "ArASyncTask.h"
00037 #include "ArFunctor.h"
00038
00039
00041
00078 class ArSignalHandler : public ArASyncTask
00079 {
00080 public:
00081
00082 typedef enum
00083 {
00084 SigHUP=1, SigINT, SigQUIT, SigILL, SigTRAP, SigABRT, SigBUS, SigFPE,
00085 SigKILL, SigUSR1, SigSEGV, SigUSR2, SigPIPE, SigALRM, SigTERM, SigSTKFLT,
00086 SigCHLD, SigCONT, SigSTOP, SigTSTP, SigTTIN, SigTTOU, SigURG,
00087 SigXCPU, SigXFSZ, SigVTALRM, SigPROF, SigWINCH, SigIO, SigPWR
00088 } Signal;
00089
00091 AREXPORT static void createHandlerNonThreaded();
00092
00094 AREXPORT static void createHandlerThreaded();
00095
00097 AREXPORT static void blockCommon();
00098
00100 AREXPORT static void unblockAll();
00101
00103 AREXPORT static void block(Signal sig);
00104
00106 AREXPORT static void unblock(Signal sig);
00107
00109 AREXPORT static void handle(Signal sig);
00110
00112 AREXPORT static void unhandle(Signal sig);
00113
00115 AREXPORT static void addHandlerCB(ArFunctor1<int> *func,
00116 ArListPos::Pos position);
00117
00119 AREXPORT static void delHandlerCB(ArFunctor1<int> *func);
00120
00122 AREXPORT static void delAllHandlerCBs(void);
00123
00125 AREXPORT static ArSignalHandler * getHandler();
00126
00128 AREXPORT static const char * nameSignal(int sig);
00129
00131 AREXPORT static void blockCommonThisThread();
00132
00134 AREXPORT static void blockAllThisThread();
00135
00137 virtual ~ArSignalHandler();
00138
00139 AREXPORT virtual void * runThread(void *arg);
00140
00141 AREXPORT static void signalCB(int sig);
00142
00143 AREXPORT static void logThread(void);
00144 protected:
00145
00146 ArSignalHandler();
00147
00148 static void initSigMap();
00149
00150 bool ourIgnoreQUIT;
00151
00152 static ArSignalHandler *ourSignalHandler;
00153 static ArStrMap ourSigMap;
00154 #ifdef WIN32
00155 #else
00156 static sigset_t ourBlockSigSet;
00157 static sigset_t ourHandleSigSet;
00158 #endif
00159 static std::list<ArFunctor1<int>*> ourHandlerList;
00160 };
00161
00162
00163 #endif // ARSIGNALHANDLER_H