summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Buland <eichlan@xagasoft.com>2012-04-06 18:45:08 +0000
committerMike Buland <eichlan@xagasoft.com>2012-04-06 18:45:08 +0000
commitb7745f00eacb2ca5b9c56331006f4f37d2566fdc (patch)
tree62530f6a0631d13e1289b19800612548dca8fb7b
parent9fa0f9cea3b92b3d44257a612731456fea629c68 (diff)
downloadlibbu++-b7745f00eacb2ca5b9c56331006f4f37d2566fdc.tar.gz
libbu++-b7745f00eacb2ca5b9c56331006f4f37d2566fdc.tar.bz2
libbu++-b7745f00eacb2ca5b9c56331006f4f37d2566fdc.tar.xz
libbu++-b7745f00eacb2ca5b9c56331006f4f37d2566fdc.zip
Supports ThreadIds now, you can also get the thread id of any thread, and
compare ThreadId objects.
-rw-r--r--default.bld3
-rw-r--r--src/stable/thread.cpp24
-rw-r--r--src/stable/thread.h19
3 files changed, 43 insertions, 3 deletions
diff --git a/default.bld b/default.bld
index 831959e..c6721b2 100644
--- a/default.bld
+++ b/default.bld
@@ -210,8 +210,7 @@ target ["tests/lzma"]
210 LDFLAGS += "-llzma"; 210 LDFLAGS += "-llzma";
211} 211}
212 212
213target ["tests/itoserver", "tests/socketblock", "tests/itoheap", 213target ["tests/threadid"]
214 "tests/itoqueue1", "tests/itoqueue2", "tests/conduit"]
215{ 214{
216 LDFLAGS += "-lpthread"; 215 LDFLAGS += "-lpthread";
217} 216}
diff --git a/src/stable/thread.cpp b/src/stable/thread.cpp
index e4563a2..0d0b768 100644
--- a/src/stable/thread.cpp
+++ b/src/stable/thread.cpp
@@ -9,6 +9,25 @@
9 9
10#include "bu/config.h" 10#include "bu/config.h"
11 11
12Bu::ThreadId::ThreadId( pthread_t tId ) :
13 tId( tId )
14{
15}
16
17Bu::ThreadId::ThreadId()
18{
19}
20
21bool Bu::ThreadId::operator==( const Bu::ThreadId &rhs )
22{
23 return pthread_equal( tId, rhs.tId );
24}
25
26bool Bu::ThreadId::operator!=( const ThreadId &rhs )
27{
28 return !pthread_equal( tId, rhs.tId );
29}
30
12Bu::Thread::Thread() 31Bu::Thread::Thread()
13{ 32{
14} 33}
@@ -17,6 +36,11 @@ Bu::Thread::~Thread()
17{ 36{
18} 37}
19 38
39Bu::ThreadId Bu::Thread::currentThread()
40{
41 return ThreadId( pthread_self() );
42}
43
20bool Bu::Thread::start() 44bool Bu::Thread::start()
21{ 45{
22 nHandle = pthread_create( &ptHandle, NULL, threadRunner, this ); 46 nHandle = pthread_create( &ptHandle, NULL, threadRunner, this );
diff --git a/src/stable/thread.h b/src/stable/thread.h
index 70e6f5f..f4b961f 100644
--- a/src/stable/thread.h
+++ b/src/stable/thread.h
@@ -12,6 +12,22 @@
12 12
13namespace Bu 13namespace Bu
14{ 14{
15 class ThreadId
16 {
17 friend class Thread;
18 private:
19 ThreadId( pthread_t tId );
20
21 public:
22 ThreadId();
23
24 bool operator==( const ThreadId &rhs );
25 bool operator!=( const ThreadId &rhs );
26
27 private:
28 pthread_t tId;
29 };
30
15 /** 31 /**
16 * Simple thread class. This wraps the basic pthread (posix threads) 32 * Simple thread class. This wraps the basic pthread (posix threads)
17 * system in an object oriented sort of way. It allows you to create a 33 * system in an object oriented sort of way. It allows you to create a
@@ -32,6 +48,8 @@ namespace Bu
32 */ 48 */
33 virtual ~Thread(); 49 virtual ~Thread();
34 50
51 static ThreadId currentThread();
52
35 /** 53 /**
36 * Begin thread execution. This will call the overridden run function, 54 * Begin thread execution. This will call the overridden run function,
37 * which will simply execute in it's own thread until the function 55 * which will simply execute in it's own thread until the function
@@ -100,7 +118,6 @@ namespace Bu
100 static void *threadRunner( void *pThread ); 118 static void *threadRunner( void *pThread );
101 119
102 void yield(); 120 void yield();
103
104 }; 121 };
105} 122}
106 123