Line data Source code
1 : //
2 : // test_sleep.cxx
3 : //
4 : // Test the sleep function
5 : //
6 :
7 : #include <stdio.h>
8 : #include <signal.h> // SIGPIPE
9 : #include <unistd.h> // alarm()
10 : //#include <assert.h> // assert()
11 : //#include <stdlib.h> // malloc()
12 : //#include <math.h> // M_PI
13 :
14 : //#include "midas.h"
15 : #include "tmfe.h"
16 :
17 0 : void test(double total_sleep, double call_sleep)
18 : {
19 0 : double start_time = TMFE::GetTime();
20 0 : double count = 0;
21 0 : double incr = 0;
22 :
23 0 : int loops = total_sleep/call_sleep;
24 :
25 0 : for (int i=0; i<loops; i++) {
26 0 : TMFE::Sleep(call_sleep);
27 0 : count += 1.0;
28 0 : incr += call_sleep;
29 : }
30 :
31 0 : double end_time = TMFE::GetTime();
32 :
33 0 : double elapsed = end_time - start_time;
34 0 : double actual_sleep = elapsed/count;
35 :
36 0 : printf("sleep %7.0f loops, %12.3f usec per loop, %12.9f sec total, %12.9f sec actual total, %12.3f usec actual per loop, oversleep %8.3f usec, %6.1f%%\n",
37 : count,
38 : call_sleep*1e6,
39 : incr,
40 : elapsed,
41 : actual_sleep*1e6,
42 0 : (actual_sleep - call_sleep)*1e6,
43 0 : (actual_sleep - call_sleep)/call_sleep*100.0);
44 0 : }
45 :
46 0 : void test_alarm(int)
47 : {
48 0 : printf("alarm!\n");
49 0 : }
50 :
51 0 : int main(int argc, char* argv[])
52 : {
53 0 : setbuf(stdout, NULL);
54 0 : setbuf(stderr, NULL);
55 :
56 0 : signal(SIGPIPE, SIG_IGN);
57 0 : signal(SIGALRM, test_alarm);
58 :
59 : //TMFE::Sleep(-1.0);
60 : //TMFE::Sleep(-0.0);
61 : //TMFE::Sleep(+0.0);
62 : //TMFE::Sleep(0);
63 : //TMFE::Sleep(12345678901234567890.0);
64 :
65 : //::alarm(2);
66 :
67 : //TMFE* mfe = TMFE::Instance();
68 :
69 : if (1) {
70 0 : printf("test short sleep:\n");
71 :
72 0 : test(1.0, 0.1);
73 0 : test(1.0, 0.01);
74 0 : test(1.0, 0.001);
75 0 : test(1.0, 0.0001);
76 0 : test(1.0, 0.00001);
77 0 : test(1.0, 0.000001);
78 0 : test(0.1, 0.0000001);
79 0 : test(0.01, 0.00000001);
80 : }
81 :
82 : if (1) {
83 0 : double sleep_requested = 2.1*60; // 2.1 minutes
84 0 : printf("test long sleep: requested %.9f sec ... sleeping ...\n", sleep_requested);
85 0 : ::alarm(10);
86 0 : double t0 = TMFE::GetTime();
87 0 : TMFE::Sleep(sleep_requested);
88 0 : double t1 = TMFE::GetTime();
89 0 : double sleep_actual = t1 - t0;
90 0 : printf("test long sleep: requested %.9f sec, actual %.9f sec\n", sleep_requested, sleep_actual);
91 : }
92 :
93 0 : return 0;
94 : }
95 :
96 : /* emacs
97 : * Local Variables:
98 : * tab-width: 8
99 : * c-basic-offset: 3
100 : * indent-tabs-mode: nil
101 : * End:
102 : */
|