source: Sophya/trunk/SophyaExt/JThreadsC++/Examples/clock.cc@ 3359

Last change on this file since 3359 was 1016, checked in by ansari, 25 years ago

Creation du module JThreadsC++, importation du code des classes
de Thread a la Java de Object Oriented Concepts Inc - Reza 19/5/2000

File size: 2.9 KB
Line 
1// **********************************************************************
2//
3// Copyright (c) 2000
4// Object Oriented Concepts, Inc.
5// Billerica, MA, USA
6//
7// All Rights Reserved
8//
9// **********************************************************************
10
11#include <JTC/JTC.h>
12
13#include <time.h>
14
15#ifdef HAVE_STD_IOSTREAM
16using namespace std;
17#endif
18
19//
20// This class will display the time every 100 milliseconds until
21// stopped.
22//
23class Clock : public JTCRunnable
24{
25 JTCThreadHandle timer_; // The thread that this class runs in.
26
27public:
28
29 //
30 // Constructor.
31 //
32 Clock()
33 {
34 }
35
36 //
37 // Display the current time.
38 //
39 void repaint()
40 {
41 time_t t = time(0);
42
43 //
44 // The more observant will note that ctime_r should be used
45 // under a multi-threaded environment (UNIX). However, for
46 // this test ctime can safely be used since it is known that
47 // only this thread will call the function.
48 //
49 cout << ctime(&t) << endl;
50 }
51
52 //
53 // Called when the thread is started.
54 //
55 void run()
56 {
57 //
58 // While the thread is non-zero continue.
59 //
60 while(timer_)
61 {
62 //
63 // Sleep for 100 milliseconds.
64 //
65 try
66 {
67 timer_ -> sleep(100);
68 }
69 catch(const JTCInterruptedException&)
70 {
71 }
72 //
73 // Repaint the time.
74 //
75 repaint();
76 }
77 }
78
79 //
80 // Start the thread.
81 //
82 void start()
83 {
84 if(!timer_)
85 {
86 //
87 // Create a new thread with this as the Runnable
88 // argument.
89 //
90 timer_ = new JTCThread(JTCRunnableHandle(this));
91 //
92 // Start the thread running.
93 //
94 timer_ -> start();
95 }
96 }
97
98 //
99 // To stop the thread, mark the thread as invalid.
100 //
101 void stop()
102 {
103 timer_ = JTCThreadHandle();
104 }
105};
106
107#ifndef HAVE_NO_EXPLICIT_TEMPLATES
108template class JTCHandleT<Clock>;
109#else
110# ifdef HAVE_PRAGMA_DEFINE
111# pragma define(JTCHandleT<Clock>)
112# endif
113#endif
114
115int
116main(int argc, char** argv)
117{
118 try
119 {
120 //
121 // A user of the JTC library must create an instance of this
122 // class to initialize the library.
123 //
124 JTCInitialize bootJTC(argc, argv);
125 //
126 // Create a new instance of the clock class.
127 //
128 JTCHandleT<Clock> c = new Clock();
129 //
130 // Start the clock thread running.
131 //
132 c -> start();
133 //
134 // Put the main thread to sleep for 5 seconds.
135 //
136 JTCThread::sleep(1000*5);
137 //
138 // Stop the clock thread.
139 //
140 c -> stop();
141 //
142 // The instance of the JTCInitialize class will ensure that
143 // this block is not exited until all threads terminate.
144 //
145 }
146 catch(const JTCException& e)
147 {
148 cerr << "JTCException: " << e.getMessage() << endl;
149 }
150
151 return 0;
152}
Note: See TracBrowser for help on using the repository browser.