File: SignalHandler.hh

package info (click to toggle)
ignition-common 4.5.1%2Bds-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 3,120 kB
  • sloc: cpp: 29,331; ansic: 5,583; javascript: 2,998; sh: 31; makefile: 23
file content (80 lines) | stat: -rw-r--r-- 2,696 bytes parent folder | download | duplicates (2)
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
/*
 * Copyright (C) 2018 Open Source Robotics Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/
#ifndef IGNITION_COMMON_SIGNALHANDLER_HH_
#define IGNITION_COMMON_SIGNALHANDLER_HH_

#include <functional>

#include <ignition/common/Export.hh>

namespace ignition
{
  namespace common
  {
    // Forward declarations.
    class SignalHandlerPrivate;

    /// \brief Register callbacks that get triggered on SIGINT and SIGTERM.
    ///
    /// This class is a thread-safe interface to system signals (SIGINT and
    /// SIGTERM). Use the AddCallback(std::function<void(int)>)
    /// function to register callbacks that
    /// should be called when a SIGINT or SIGTERM is triggered.
    ///
    /// Example using a lambda callback:
    ///
    /// ~~~
    /// ignition::common::SignalHandler handler;
    /// handler.AddCallback([] (int _sig)
    /// {
    ///   printf("Signal[%d] received\n", _sig);
    /// });
    /// ~~~
    ///
    class IGNITION_COMMON_VISIBLE SignalHandler
    {
      /// \brief Constructor
      public: SignalHandler();

      /// \brief Destructor.
      public: virtual ~SignalHandler();

      /// \brief Add a callback to execute when a signal is received.
      /// \param[in] _cb Callback to execute.
      /// \return True if the callback was added. A callback may not be
      /// added if the SignalHandler was not successfully initialized.
      /// \sa bool Initialized() const
      public: bool AddCallback(std::function<void(int)> _cb);

      /// \brief Get whether the signal handlers were successfully
      /// initialized.
      /// \return True if the signal handlers were successfully created.
      public: bool Initialized() const;

      /// \brief Set whether the signal handler was successfully
      /// initialized. This function is here for testing purposes, and
      /// if for some reason a person needs to create a subclass to control
      /// the initialization value.
      /// \param[in] _init New value of the initialized member variabl.e
      protected: virtual void SetInitialized(const bool _init);

      /// \brief Private data pointer
      private: SignalHandlerPrivate *dataPtr;
    };
  }
}
#endif