libDwm-0.6.0
DwmSignal.hh
Go to the documentation of this file.
1 //===========================================================================
2 // @(#) $DwmPath: dwm/libDwm/tags/libDwm-0.6.0/include/DwmSignal.hh 8401 $
3 // @(#) $Id: DwmSignal.hh 8401 2016-04-17 06:44:31Z dwm $
4 //===========================================================================
5 // Copyright (c) Daniel W. McRobb 2000-2007, 2016
6 // All rights reserved.
7 //
8 // Redistribution and use in source and binary forms, with or without
9 // modification, are permitted provided that the following conditions
10 // are met:
11 //
12 // 1. Redistributions of source code must retain the above copyright
13 // notice, this list of conditions and the following disclaimer.
14 // 2. Redistributions in binary form must reproduce the above copyright
15 // notice, this list of conditions and the following disclaimer in the
16 // documentation and/or other materials provided with the distribution.
17 // 3. The names of the authors and copyright holders may not be used to
18 // endorse or promote products derived from this software without
19 // specific prior written permission.
20 //
21 // IN NO EVENT SHALL DANIEL W. MCROBB BE LIABLE TO ANY PARTY FOR
22 // DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
23 // INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE,
24 // EVEN IF DANIEL W. MCROBB HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
25 // DAMAGE.
26 //
27 // THE SOFTWARE PROVIDED HEREIN IS ON AN "AS IS" BASIS, AND
28 // DANIEL W. MCROBB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT,
29 // UPDATES, ENHANCEMENTS, OR MODIFICATIONS. DANIEL W. MCROBB MAKES NO
30 // REPRESENTATIONS AND EXTENDS NO WARRANTIES OF ANY KIND, EITHER
31 // IMPLIED OR EXPRESS, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32 // WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
33 // PURPOSE, OR THAT THE USE OF THIS SOFTWARE WILL NOT INFRINGE ANY PATENT,
34 // TRADEMARK OR OTHER RIGHTS.
35 //===========================================================================
36 
37 //---------------------------------------------------------------------------
40 //---------------------------------------------------------------------------
41 
42 #ifndef _DWMSIGNAL_HH_
43 #define _DWMSIGNAL_HH_
44 
45 extern "C" {
46  #include <signal.h>
47 }
48 
49 #include <string>
50 #include <deque>
51 #include <map>
52 
53 namespace Dwm {
54 
55  //--------------------------------------------------------------------------
57  //--------------------------------------------------------------------------
58  class Signal
59  {
60  public:
61  //------------------------------------------------------------------------
63  //------------------------------------------------------------------------
64  Signal(int sigNum);
65 
66  //------------------------------------------------------------------------
68  //------------------------------------------------------------------------
69  Signal(const Signal & signal);
70 
71  //------------------------------------------------------------------------
73  //------------------------------------------------------------------------
74  bool Block();
75 
76  //------------------------------------------------------------------------
78  //------------------------------------------------------------------------
79  bool Unblock();
80 
81  //------------------------------------------------------------------------
83  //------------------------------------------------------------------------
84  bool IsBlocked();
85 
86  //------------------------------------------------------------------------
88  //------------------------------------------------------------------------
89  bool IsPending();
90 
91  //------------------------------------------------------------------------
94  //------------------------------------------------------------------------
95  void Wait();
96 
97  //------------------------------------------------------------------------
101  //------------------------------------------------------------------------
102  int PushHandler(void (*handler)(int));
103 
104  //------------------------------------------------------------------------
106  //------------------------------------------------------------------------
107  int PopHandler();
108 
109  //------------------------------------------------------------------------
111  //------------------------------------------------------------------------
112  const std::string & Name() const;
113 
114  protected:
115  int _sigNum;
116  std::deque<void (*)(int)> _handlers;
117 
118  Signal();
119 
120  static void FillNames();
121  static std::map<int,std::string,std::less<int> > _names;
122 
123  };
124 
125 } // namespace Dwm
126 
127 #endif // _DWMSIGNAL_HH_
128 
129 //---------------------------- emacs settings -----------------------------
130 // Local Variables:
131 // mode: C++/la
132 // tab-width: 2
133 // indent-tabs-mode: nil
134 // c-basic-offset: 2
135 // End:
136 //-------------------------------------------------------------------------
int PushHandler(void(*handler)(int))
Pushes a signal onto the top of a stack of signal handlers for the signal.
const std::string & Name() const
Returns a string representation of the signal ("e.g. "SIGHUP").
Definition: DwmBZ2IO.hh:67
bool IsPending()
Returns true if the signal is currently pending.
void Wait()
Waits for the delivery of the signal to the calling thread.
bool Block()
Block the signal.
int PopHandler()
Pops the top signal handler off of the stack of signal handlers.
bool Unblock()
Unblock the signal.
This class encapsulates a signal.
Definition: DwmSignal.hh:58
bool IsBlocked()
Returns true if the signal is currently blocked.