5DT Data Glove plugin  1.0
ou_thread.h
1 
7 /* Copyright 2000 - 2005 Vijay Mathew Pandyalakal. All rights reserved.
8  *
9  * This software may be used or modified for any purpose, personal or
10  * commercial. Open Source redistributions are permitted.
11  *
12  * Redistributions qualify as "Open Source" under one of the following terms:
13  *
14  * Redistributions are made at no charge beyond the reasonable cost of
15  * materials and delivery.
16  *
17  * Redistributions are accompanied by a copy of the Source Code or by an
18  * irrevocable offer to provide a copy of the Source Code for up to three
19  * years at the cost of materials and delivery. Such redistributions
20  * must allow further use, modification, and redistribution of the Source
21  * Code under substantially the same terms as this license.
22  *
23  * Redistributions of source code must retain the copyright notices as they
24  * appear in each source code file, these license terms, and the
25  * disclaimer/limitation of liability set forth as paragraph 6 below.
26  *
27  * Redistributions in binary form must reproduce this Copyright Notice,
28  * these license terms, and the disclaimer/limitation of liability set
29  * forth as paragraph 6 below, in the documentation and/or other materials
30  * provided with the distribution.
31  *
32  * The Software is provided on an "AS IS" basis. No warranty is
33  * provided that the Software is free of defects, or fit for a
34  * particular purpose.
35  *
36  * Limitation of Liability. The Author shall not be liable
37  * for any damages suffered by the Licensee or any third party resulting
38  * from use of the Software.
39  */
40 #include <scolPlugin.h>
41 namespace openutils {
42  class ThreadException;
43  class Mutex;
44 
51  class Thread {
52 
53  private:
54  // unsigned long* to the low-level thread object
55  unsigned long* m_hThread;
56  // a name to identify the thread
57  std::string m_strName;
58 
59  public:
60  Thread();
61  Thread(const char* nm);
62  virtual ~Thread();
63  void setName(const char* nm);
64  std::string getName() const;
65  void start();
66  virtual void run();
67  void sleep(long ms);
68  void suspend();
69  void resume();
70  void stop();
71 
72  void setPriority(int p);
73 
74  bool wait(const char* m,long ms=5000);
75  void release(const char* m);
76 
77  public:
78  // Thread priorities
79  static const int P_ABOVE_NORMAL;
80  static const int P_BELOW_NORMAL;
81  static const int P_HIGHEST;
82  static const int P_IDLE;
83  static const int P_LOWEST;
84  static const int P_NORMAL;
85  static const int P_CRITICAL;
86  private:
87  };// class Thread
88 
93  class Mutex {
94  private:
95  // unsigned long* to the low-level mutex object
96  unsigned long* m_hMutex;
97  // name to identify the mutex
98  std::string m_strName;
99  public:
100  Mutex();
101  Mutex(const char* nm);
102  void create(const char* nm);
103  unsigned long* getMutexHandle();
104  std::string getName();
105  void release();
106  ~Mutex();
107  };
108 
114  private:
115  std::string msg;
116  public:
117  ThreadException(const char* m);
118  std::string getMessage() const;
119  };
120 } // namespace openutils
121 
122 // global function called by the thread object.
123 // this in turn calls the overridden run()
124 extern "C" {
125  unsigned int _ou_thread_proc(void* param);
126 }
127 
128 
129