From c28e7b0945f77754e46be20c436561bfcfd4f260 Mon Sep 17 00:00:00 2001 From: Carl Pearson Date: Mon, 30 Sep 2019 13:23:25 -0500 Subject: [PATCH] add -h --help flag --- tools/perfect.cpp | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/tools/perfect.cpp b/tools/perfect.cpp index 9e89165..67841de 100644 --- a/tools/perfect.cpp +++ b/tools/perfect.cpp @@ -1,7 +1,9 @@ #include #include +#include #include #include +#include #include #ifdef __linux__ @@ -155,6 +157,11 @@ int main(int argc, char **argv) { std::string stdoutPath; std::string stderrPath; int iters = 1; + int sleepMs = 1000; + + bool help = false; + + auto helpMode = option("-h", "--help").set(help).doc("show help"); auto shieldGroup = ((option("-u").doc("number of unshielded CPUs") & value("INT", numUnshielded)) | @@ -184,12 +191,15 @@ int main(int argc, char **argv) { (option("--stderr").doc("redirect child stderr") & value("PATH", stderrPath))); - auto cli = ((noModMode | modMode), - (option("-n").doc("run multiple times") & value("INT", iters)), - // run everything after "--" - required("--") & greedy(values("cmd", program)) + auto cli = + helpMode | + ((noModMode | modMode), + (option("--sleep-ms").doc("sleep before run") & value("INT", sleepMs)), + (option("-n").doc("run multiple times") & value("INT", iters)), helpMode, + // run everything after "--" + required("--") & greedy(values("cmd", program)) - ); + ); if (!parse(argc, argv, cli)) { auto fmt = doc_formatting{}.doc_column(31); @@ -197,6 +207,12 @@ int main(int argc, char **argv) { return -1; } + if (help) { + auto fmt = doc_formatting{}.doc_column(31); + std::cout << make_man_page(cli, argv[0], fmt); + return 0; + } + // open the redirect files, if needed int errf = 0; int outf = 0; @@ -333,6 +349,12 @@ int main(int argc, char **argv) { PERFECT(perfect::drop_caches()); } + // sleep before each run + if (sleepMs) { + std::cerr << "sleep " << sleepMs << " ms before run\n"; + std::this_thread::sleep_for(std::chrono::milliseconds(sleepMs)); + } + std::cerr << "exec "; for (size_t i = 0; i < args.size() - 1; ++i) { std::cerr << args[i] << " ";