diff options
Diffstat (limited to 'examples/sinewave/sinewave_example.cpp')
-rw-r--r-- | examples/sinewave/sinewave_example.cpp | 17 |
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++; |