#include #include #include #include #include #include #include #include #include volatile bool signalEnd = false; void sig_handler(int signum) { signalEnd = true; } using seconds = std::chrono::duration; using Clock = std::chrono::high_resolution_clock; int main(int argc, char* argv[]) { signal(SIGINT, sig_handler); seconds interval{ 0.01 }; int i = 0; int samples; int opt; try { while ((opt = getopt(argc, argv, "n:i:")) != -1) { switch (opt) { case 'i': interval = seconds{ std::stod(optarg) }; break; case 'n': samples = std::stoi(optarg); break; default: std::cerr << "Usage: " << argv[0] << " [-i interval][-n samples]" << std::endl; return 1; } } } catch (const std::invalid_argument& ia) { std::cerr << "Invalid argument: " << ia.what() << std::endl; return 1; } while (!signalEnd) { if (i >= samples) break; i++; const auto endTime = Clock::now() + interval; std::cout << hwd::sinewave::get_point() << std::endl; std::this_thread::sleep_until(endTime); } return 0; }