Jpp test-rotations-new
the software that should make you happy
Loading...
Searching...
No Matches
JTimekeeper.cc
Go to the documentation of this file.
1#include <string>
2#include <iostream>
3#include <iomanip>
4
5#include "Jeep/JTimekeeper.hh"
6#include "JSystem/JTime.hh"
7
8#include "Jeep/JPrint.hh"
9#include "Jeep/JParser.hh"
10#include "Jeep/JMessage.hh"
11
12
13/**
14 * \file
15 * Example program to test JEEP::JTimekeeper class.
16 * \author mdejong
17 */
18int main(int argc, char* argv[])
19{
20 using namespace std;
21
22 int intervalTime_ms;
23 int totalTime_s;
24 int debug;
25
26 try {
27
28 JParser<> zap;
29
30 zap['t'] = make_field(intervalTime_ms) = 100;
31 zap['s'] = make_field(totalTime_s) = 2;
32 zap['d'] = make_field(debug) = 1;
33
34 zap(argc, argv);
35 }
36 catch(const exception &error) {
37 FATAL(error.what() << endl);
38 }
39
40
41 using namespace JPP;
42
43 if (intervalTime_ms <= 0) { FATAL("interval time [ms] " << intervalTime_ms << " < 0." << endl); }
44 if (totalTime_s <= 0) { FATAL("total time [s] " << totalTime_s << " < 0." << endl); }
45
47
48 cout << "hit <return> to interrupt" << endl;
49
50 JTimekeeper clock;
51
52 clock.setInterval(intervalTime_ms * 1000);
53 clock.reset();
54
55 const long long int t0 = getLocalTime();
56
57 string buffer;
58 int numberOfInterrupts = 0;
59
60 for (int i = 0; i < 1000 * totalTime_s / intervalTime_ms; ) {
61
62 DEBUG(setw(5) << i << rewind);
63
64 mask.set(STDIN_FILENO); // hit <return> to interrupt wait(..)
65
66 if (clock.wait(mask)) {
67
68 getline(cin, buffer); // flush input
69
70 ++numberOfInterrupts;
71
72 } else {
73
74 ++i;
75 }
76 }
77 NOTICE(endl);
78
79 const long long int t1 = getLocalTime();
80
81 NOTICE("Number of interrupts " << setw(8) << right << numberOfInterrupts << endl);
82 NOTICE("Total delay [ms] " << setw(8) << right << clock.getDelay() / 1000 << endl);
83 NOTICE("Elapsed time [ms] " << setw(8) << right << (t1 - t0) / 1000 << endl);
84
85 if (numberOfInterrupts != 0) {
86 NOTICE("Time per interrupt [us] " << setw(8) << right << (t1 - t0 - clock.getDelay()) / numberOfInterrupts << endl);
87 }
88}
89
std::ostream & rewind(std::ostream &out)
Rewind character.
Definition JManip.hh:222
General purpose messaging.
#define DEBUG(A)
Message macros.
Definition JMessage.hh:62
#define NOTICE(A)
Definition JMessage.hh:64
#define FATAL(A)
Definition JMessage.hh:67
int debug
debug level
Definition JSirene.cc:72
Utility class to parse command line options.
#define make_field(A,...)
macro to convert parameter to JParserTemplateElement object
Definition JParser.hh:2142
I/O formatting auxiliaries.
System time information.
int main(int argc, char *argv[])
Scheduling of actions via fixed latency intervals.
Time keeper.
long long int getDelay() const
Get total delay time.
void setInterval(const long long int interval_us)
Set interval time.
void wait() const
Wait until the number of time intervals has elapsed since the last call to the reset method.
void reset(const long long int t0)
Reset time.
Auxiliary class for method select.
void set(const int file_descriptor)
Set file descriptor.
Utility class to parse command line options.
Definition JParser.hh:1698
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).