00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef __THREAD_H__
00027 #define __THREAD_H__
00028
00029 #include <cbits/Runnable.h>
00030 #include <string>
00031
00032
00033 #ifdef BUILD_DLL
00034 #define EXPORT __declspec(dllexport)
00035 #else
00036 #define EXPORT
00037 #endif
00038
00039
00066 namespace cbits
00067 {
00068
00126 class EXPORT Thread
00127 {
00128
00129 public:
00130
00132 enum State
00133 {
00134 READY = 1,
00136 ALIVE = 2,
00138 DEAD = 3
00140 };
00141
00142
00144 enum Priority
00145 {
00146 PRIORITY_1 = 1,
00147 PRIORITY_2 = 2,
00148 PRIORITY_3 = 3,
00149 PRIORITY_4 = 4,
00150 PRIORITY_5 = 5,
00151 PRIORITY_6 = 6,
00152 PRIORITY_7 = 7,
00153 PRIORITY_8 = 8,
00154 PRIORITY_9 = 9,
00155 MIN_PRIORITY = PRIORITY_1,
00156 DEFAULT_PRIORITY = PRIORITY_5,
00157 MAX_PRIORITY = PRIORITY_9
00158 };
00159
00160
00167 static Thread* create
00168 (
00169 Runnable* r,
00171 const Priority p = DEFAULT_PRIORITY
00173 );
00174
00175
00182 static Thread* getCurrent();
00183
00184
00191 static void yield();
00192
00193
00203 void start();
00204
00205
00212 const long getThreadID() const;
00213
00214
00223 void interrupt();
00224
00225
00236 static const bool isInterrupted();
00237
00238
00244 const bool join
00245 (
00251 const long msec=0
00252 );
00253
00254
00258 const State getState
00259 (
00260 const bool lockit = true
00261
00262
00263
00264
00265 ) const;
00266
00267
00271 void setData
00272 (
00276 void*
00277 ) const;
00278
00279
00286 void* getData() const;
00287
00288
00293 static void sleep
00294 (
00300 const long msec
00301 );
00302
00306 virtual ~Thread();
00307
00308
00309 protected:
00310
00315 Thread
00316 (
00318 Priority p = DEFAULT_PRIORITY
00319 );
00320
00321
00326 Thread
00327 (
00329 Runnable* r,
00330
00332 Priority p = DEFAULT_PRIORITY
00333 );
00334
00335
00342 Runnable* getTarget() const { return _target; }
00343
00344
00354 const State setState
00355 (
00357 State,
00358
00363 const bool lockit = true
00364 );
00365
00366
00374 void setError
00375 (
00377 const char* e
00378 ) const
00379 {
00380 _error = e;
00381 }
00382
00383
00395 const std::string& getError() const
00396 {
00397 return _error;
00398 }
00399
00400
00411 const Priority getPriority() const
00412 {
00413 return _priority;
00414 }
00415
00416
00428 virtual const bool impl_create_thread
00429 (
00430 const Priority
00431 ) = 0;
00432
00433
00446 virtual const bool impl_start_thread() = 0;
00447
00448
00458 virtual const long impl_get_threadid() const = 0;
00459
00460
00473 virtual void impl_lock_obj() const = 0;
00474
00475
00489 virtual void impl_unlock_obj() const = 0;
00490
00491
00501 virtual void impl_interrupt() = 0;
00502
00503
00517 virtual const bool impl_join( const long msec ) = 0;
00518
00519
00527 virtual void impl_sleep( const long msec ) = 0;
00528
00529
00530 private:
00531
00533 mutable std::string _error;
00534
00536 Runnable* _target;
00537
00539 Priority _priority;
00540
00542 State _state;
00543
00545 mutable void* _data;
00546
00548 mutable bool _interrupted;
00549 };
00550
00551 };
00552
00553 #endif
00554
00555
00556
00557
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579
00580
00581
00582
00583
00584
00585
00586
00587
00588
00589
00590
00591
00592