root/trunk/dep/src/zthread/ThreadImpl.h @ 2

Revision 2, 2.8 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1/*
2 * Copyright (c) 2005, Eric Crahen
3 *
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
5 * of this software and associated documentation files (the "Software"), to deal
6 * in the Software without restriction, including without limitation the rights
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 * copies of the Software, and to permit persons to whom the Software is furnished
9 * to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be included in all
12 * copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
18 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 *
21 */
22
23#ifndef __ZTTHREADIMPL_H__
24#define __ZTTHREADIMPL_H__
25
26#include "zthread/ThreadLocalImpl.h"
27#include "zthread/Thread.h"
28#include "zthread/Exceptions.h"
29#include "IntrusivePtr.h"
30
31#include "Monitor.h"
32#include "TSS.h"
33#include "ThreadOps.h"
34#include "State.h"
35
36#include <map>
37#include <deque>
38
39namespace ZThread {
40
41/**
42 * @class ThreadImpl
43 * @author Eric Crahen <http://www.code-foo.com>
44 * @date <2003-07-27T13:39:03-0400>
45 * @version 2.3.0
46 */
47class ThreadImpl : public IntrusivePtr<ThreadImpl, FastLock>, public ThreadOps {
48
49  typedef std::deque<ThreadImpl*> List;
50
51  //! TSS to store implementation to current thread mapping.
52  static TSS<ThreadImpl*> _threadMap;
53
54  //! The Monitor for controlling this thread
55  Monitor _monitor;
56 
57  //! Current state for the thread
58  State _state;
59
60  //! Joining threads
61  List _joiners;
62
63 public:
64 
65  typedef std::map<const ThreadLocalImpl*, ThreadLocalImpl::ValuePtr > ThreadLocalMap;
66
67 private:
68 
69  ThreadLocalMap _tls;
70
71  //! Cached thread priority
72  Priority _priority;
73
74  //! Request cancel() when main() goes out of scope
75  bool _autoCancel;
76 
77  void start(const Task& task);
78
79 public:
80
81  ThreadImpl();
82
83  ThreadImpl(const Task&, bool);
84
85  ~ThreadImpl(); 
86
87  Monitor& getMonitor();
88
89  void cancel(bool autoCancel = false);
90
91  bool interrupt();
92
93  bool isInterrupted();
94
95  bool isCanceled();
96
97  Priority getPriority() const;
98
99  //  ThreadLocalMap& getThreadLocalMap();
100  ThreadLocalMap& getThreadLocalMap() { return _tls; }
101
102  bool join(unsigned long); 
103 
104  void setPriority(Priority);
105
106  bool isActive();
107
108  bool isReference();
109
110  static void sleep(unsigned long); 
111
112  static void yield();
113 
114  static ThreadImpl* current();
115
116  static void dispatch(ThreadImpl*, ThreadImpl*, Task);
117
118};
119
120} // namespace ZThread
121
122#endif // __ZTTHREADIMPL_H__
Note: See TracBrowser for help on using the browser.