QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
SignalHandler.h
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4
5#include <QtCore/QObject>
6
7#ifdef Q_OS_WIN
8 class QWinEventNotifier;
9#else
10 class QSocketNotifier;
11#endif
12
13class SignalHandler final : public QObject
14{
15 Q_OBJECT
16
17public:
18 explicit SignalHandler(QObject* parent = nullptr);
19 ~SignalHandler() override;
20
22
23 static SignalHandler* current() { return s_current.load(std::memory_order_acquire); }
24
25#ifdef Q_OS_WIN
26 static int consoleCtrlHandler(unsigned long evt);
27#else
28private slots:
29 void _onSigInt();
30 void _onSigTerm();
31#endif
32
33private:
34#ifdef Q_OS_WIN
35 QWinEventNotifier* _notifier{nullptr};
36 Qt::HANDLE _signalEvent{nullptr};
37#else
38 static void _intSignalHandler(int signum);
39 static void _termSignalHandler(int signum);
40
41 int _sigIntFd[2] = {-1, -1}; // socketpair read=0, write=1
42 int _sigTermFd[2] = {-1, -1};
43 QSocketNotifier* _notifierInt{nullptr};
44 QSocketNotifier* _notifierTerm{nullptr};
45#endif
46
47 bool _sigIntTriggered{false};
48 static std::atomic<SignalHandler*> s_current;
49};
static SignalHandler * current()
int setupSignalHandlers()
~SignalHandler() override