blob: 01325f5502a5e454e4367f5ba743becab6ee9215 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
#include "ace/OS_NS_sys_time.h"
// Listing 1 code/ch20
#include "ace/Timer_Queue_Adapters.h"
#include "ace/Timer_Heap.h"
typedef ACE_Thread_Timer_Queue_Adapter<ACE_Timer_Heap>
ActiveTimer;
// Listing 1
// Listing 2 code/ch20
class CB : public ACE_Event_Handler
{
public:
CB (int id) : id_(id) { }
virtual int handle_timeout (const ACE_Time_Value &,
const void *arg)
{
ACE_TRACE ("CB::handle_timeout");
const int *val = static_cast<const int*> (arg);
ACE_ASSERT((*val) == id_);
ACE_UNUSED_ARG (val);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Expiry handled by thread %t\n")));
return 0;
}
private:
int id_;
};
// Listing 2
// Listing 3 code/ch20
int ACE_TMAIN (int, ACE_TCHAR *[])
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("the main thread %t has started\n")));
// Create an "active" timer and start its thread.
ActiveTimer atimer;
atimer.activate ();
CB cb1 (1);
CB cb2 (2);
int arg1 = 1;
int arg2 = 2;
// Schedule timers to go off 3 & 4 seconds from now
// and then with an interval of 1.1 seconds.
const ACE_Time_Value curr_tv = ACE_OS::gettimeofday ();
ACE_Time_Value interval = ACE_Time_Value (1, 100000);
atimer.schedule (&cb1,
&arg1,
curr_tv + ACE_Time_Value (3L),
interval);
atimer.schedule (&cb2,
&arg2,
curr_tv + ACE_Time_Value (4L),
interval);
ACE_Thread_Manager::instance ()->wait (); // Wait forever.
return 0;
}
// Listing 3
|