summaryrefslogtreecommitdiff
path: root/examples/sinewave/sinewave_example.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'examples/sinewave/sinewave_example.cpp')
-rw-r--r--examples/sinewave/sinewave_example.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/examples/sinewave/sinewave_example.cpp b/examples/sinewave/sinewave_example.cpp
index a0089d9..8b50804 100644
--- a/examples/sinewave/sinewave_example.cpp
+++ b/examples/sinewave/sinewave_example.cpp
@@ -10,11 +10,10 @@
#include <hwd.h>
+volatile sig_atomic_t keep_running{ 1 };
-volatile bool signalEnd = false;
-
-void sig_handler(int signum) {
- signalEnd = true;
+void termination_handler(int signum){
+ keep_running = false;
}
using seconds = std::chrono::duration<double>;
@@ -22,7 +21,13 @@ using Clock = std::chrono::high_resolution_clock;
int main(int argc, char* argv[]) {
- signal(SIGINT, sig_handler);
+ struct sigaction int_action;
+
+ int_action.sa_handler = termination_handler;
+ sigemptyset(&int_action.sa_mask);
+ int_action.sa_flags = 0;
+ sigaction(SIGINT, &int_action, NULL);
+
seconds interval{ 0.01 };
int i = 0;
@@ -51,7 +56,7 @@ int main(int argc, char* argv[]) {
}
- while (!signalEnd) {
+ while (keep_running) {
if (i >= samples) break;
i++;