00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_TSysEvtHandler
00013 #define ROOT_TSysEvtHandler
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef ROOT_TObject
00025 #include "TObject.h"
00026 #endif
00027 #ifndef ROOT_TQObject
00028 #include "TQObject.h"
00029 #endif
00030
00031
00032 class TSysEvtHandler : public TObject, public TQObject {
00033
00034 private:
00035 Bool_t fIsActive;
00036
00037 void *GetSender() { return this; }
00038
00039 public:
00040 TSysEvtHandler() : fIsActive(kTRUE) { }
00041 virtual ~TSysEvtHandler() { }
00042
00043 void Activate();
00044 void DeActivate();
00045 Bool_t IsActive() const { return fIsActive; }
00046
00047 virtual void Add() = 0;
00048 virtual void Remove() = 0;
00049 virtual Bool_t Notify() = 0;
00050
00051 virtual void Activated() { Emit("Activated()"); }
00052 virtual void DeActivated() { Emit("DeActivated()"); }
00053 virtual void Notified() { Emit("Notified()"); }
00054 virtual void Added() { Emit("Added()"); }
00055 virtual void Removed() { Emit("Removed()"); }
00056
00057 ClassDef(TSysEvtHandler,0)
00058 };
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 class TFileHandler : public TSysEvtHandler {
00070
00071 protected:
00072 int fFileNum;
00073 int fMask;
00074 int fReadyMask;
00075
00076 TFileHandler(): fFileNum(-1), fMask(0), fReadyMask(0) { }
00077
00078 public:
00079 enum { kRead = 1, kWrite = 2 };
00080
00081 TFileHandler(int fd, int mask);
00082 virtual ~TFileHandler() { Remove(); }
00083 int GetFd() const { return fFileNum; }
00084 void SetFd(int fd) { fFileNum = fd; }
00085 virtual Bool_t Notify();
00086 virtual Bool_t ReadNotify();
00087 virtual Bool_t WriteNotify();
00088 virtual Bool_t HasReadInterest();
00089 virtual Bool_t HasWriteInterest();
00090 virtual void SetInterest(Int_t mask);
00091 virtual void ResetReadyMask() { fReadyMask = 0; }
00092 virtual void SetReadReady() { fReadyMask |= 0x1; }
00093 virtual void SetWriteReady() { fReadyMask |= 0x2; }
00094 virtual Bool_t IsReadReady() const { return (fReadyMask & 0x1) == 0x1; }
00095 virtual Bool_t IsWriteReady() const { return (fReadyMask & 0x2) == 0x2; }
00096 virtual void Add();
00097 virtual void Remove();
00098
00099 ClassDef(TFileHandler,0)
00100 };
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111 enum ESignals {
00112 kSigBus,
00113 kSigSegmentationViolation,
00114 kSigSystem,
00115 kSigPipe,
00116 kSigIllegalInstruction,
00117 kSigQuit,
00118 kSigInterrupt,
00119 kSigWindowChanged,
00120 kSigAlarm,
00121 kSigChild,
00122 kSigUrgent,
00123 kSigFloatingException,
00124 kSigTermination,
00125 kSigUser1,
00126 kSigUser2
00127 };
00128
00129
00130 class TSignalHandler : public TSysEvtHandler {
00131
00132 protected:
00133 ESignals fSignal;
00134 Bool_t fSync;
00135 Int_t fDelay;
00136
00137 TSignalHandler(): fSignal((ESignals)-1), fSync(kTRUE), fDelay(0) { }
00138
00139 public:
00140 TSignalHandler(ESignals sig, Bool_t sync = kTRUE);
00141 virtual ~TSignalHandler() { Remove(); }
00142 void Delay() { fDelay = 1; }
00143 void HandleDelayedSignal();
00144 ESignals GetSignal() const { return fSignal; }
00145 void SetSignal(ESignals sig) { fSignal = sig; }
00146 Bool_t IsSync() const { return fSync; }
00147 Bool_t IsAsync() const { return !fSync; }
00148 virtual Bool_t Notify();
00149 virtual void Add();
00150 virtual void Remove();
00151
00152 ClassDef(TSignalHandler,0)
00153 };
00154
00155 inline void TSignalHandler::HandleDelayedSignal()
00156 {
00157 if (fDelay > 1) {
00158 fDelay = 0;
00159 Notify();
00160 } else
00161 fDelay = 0;
00162 }
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173 namespace std { class exception; }
00174
00175 class TStdExceptionHandler : public TSysEvtHandler {
00176
00177 public:
00178 enum EStatus { kSEProceed, kSEHandled, kSEAbort };
00179
00180 TStdExceptionHandler();
00181 virtual ~TStdExceptionHandler() { }
00182
00183 virtual void Add();
00184 virtual void Remove();
00185 virtual Bool_t Notify();
00186
00187 virtual EStatus Handle(std::exception& exc) = 0;
00188
00189 ClassDef(TStdExceptionHandler,0)
00190 };
00191
00192 #endif