|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2021 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // シグナルスレッド
9: //
10:
11: #pragma once
12:
13: #include "thread.h"
14:
15: class SignalThread : public ThreadDevice
16: {
17: using inherited = ThreadDevice;
18:
19: public:
20: SignalThread();
21: ~SignalThread() override;
22:
23: bool StartThread() override;
24: void ThreadRun() override;
25: void Terminate() override;
26:
27: // このスレッドにシグナルを投げる
28: void Kill(int signo);
29:
1.1.1.2 root 30: private:
1.1 root 31: // シグナルをブロック/アンブロックする
32: void Mask(int how, int signo);
33:
34: // ブロックするシグナル集合
35: sigset_t waitset {};
36:
37: // コマンド(フラグ)
38: // 終了フラグは立てるだけ、読むだけなので atomic じゃなくてもいいはず。
1.1.1.3 ! root 39: volatile bool request_terminate {};
1.1 root 40: };
41:
1.1.1.2 root 42: static inline SignalThread *GetSignalThread() {
43: return Object::GetObject<SignalThread>(OBJ_SIGNAL_THREAD);
44: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.