lichao
2021-05-10 77a6c3512a44dfe6540dde71946e6484fe4f173f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#ifndef SIGNALHANDLE_WNM4OBKG
#define SIGNALHANDLE_WNM4OBKG
 
#include <signal.h>
#include <functional>
#include <vector>
 
typedef std::function<void (int)> SigFunc;
// return 0 on success.
int CatchSignals(const int signals[], const size_t count, SigFunc f);
int WaitForSignals(const int signals[], const size_t count, SigFunc f = SigFunc());
 
template <size_t N> inline
int CatchSignals(const int (& signals)[N], SigFunc f) {
    return CatchSignals(signals, N, f);
}
 
template <class ...T> inline
void CatchSignals(std::initializer_list<int> list, T...t)
{
    std::vector<int> arr(list.begin(), list.end());
    CatchSignals(arr.data(), arr.size(), t...);
}
 
template <size_t N> inline
int WaitForSignals(const int (&signals)[N]) {
    return WaitForSignals(signals, N, SigFunc());
}
 
template <size_t N, class Func> inline
int WaitForSignals(int (&signals)[N], Func f) {
    return WaitForSignals(signals, N, f);
}
 
template <class ...T> inline
void WaitForSignals(std::initializer_list<int> list, T...t)
{
    std::vector<int> arr(list.begin(), list.end());
    WaitForSignals(arr.data(), arr.size(), t...);
}
#endif // end of include guard: SIGNALHANDLE_WNM4OBKG