18 #define THREAD_START(fn) void* (fn)(void *arg)
22 #define THREAD_STOP(fn) void (fn)(void *arg)
26 #define THREAD_CLEAN(fn) void (fn)(void *arg)
30 #define THREAD_PING(fn) void (fn)(void *arg)
36 #define INSTALL_MUTEX_CLEANUP(mutex, logStream) \
39 if(pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype) != 0) \
40 logStream.appendSysError(true, "pthread_setcanceltype");\
41 pthread_cleanup_push(&Thread::unlockMutex, (void *) (&mutex));\
42 if(oldtype != PTHREAD_CANCEL_DEFERRED && oldtype != PTHREAD_CANCEL_ASYNCHRONOUS) ;\
43 oldtype = PTHREAD_CANCEL_ASYNCHRONOUS
45 #define UNINSTALL_MUTEX_CLEANUP(logStream) \
46 pthread_cleanup_pop(0);\
47 if(pthread_setcanceltype(oldtype, NULL) != 0) \
48 logStream.appendSysError(true, "pthread_setcanceltype");\
72 void start(
void* arg);
144 Thread(THREAD_START(*startFn),
146 THREAD_PING(*pingFn),
148 unsigned startOrder=0,
149 unsigned cancelOrder=0);
154 Thread(THREAD_START(*startFn),
156 THREAD_PING(*pingFn),
159 unsigned cancelOrder,
161 int schedPolicy=SCHED_RR);
181 void raise(
int sigNo);
194 inline unsigned startOrder() {
198 inline unsigned cancelOrder() {
202 void waitUntilReady();
204 inline std::string name() {
210 unsigned startOrder_;
211 unsigned cancelOrder_;
213 pthread_attr_t attr_;
230 pthread_mutex_t runningGuard_;
246 pthread_mutex_t guard;
274 void privateConstructor(THREAD_START(*startFn),
276 THREAD_PING(*pingFn),
278 unsigned startOrder,
unsigned cancelOrder,
285 static THREAD_START(startThread);
297 THREAD_START(*userStartFn_);
310 THREAD_PING(*userPingFn_);
316 bool setRunStatePrivate(
bool state);
bool isPingable()
Definition: Thread.cc:444
void setRunState(bool state)
Definition: Thread.cc:140
void ping(void *arg)
Definition: Thread.cc:331
void cancel()
Definition: Thread.cc:261
bool isRunning()
Definition: Thread.cc:340
bool matchName(std::string compname)
Definition: Thread.cc:411
void broadcastDone()
Definition: Thread.cc:402
Thread(THREAD_START(*startFn), THREAD_CLEAN(*cleanFn), THREAD_PING(*pingFn), std::string name, unsigned startOrder=0, unsigned cancelOrder=0)
std::string strName()
Definition: Thread.cc:419
~Thread()
Definition: Thread.cc:125
static THREAD_CLEAN(unlockMutex)
void start(void *arg)
Definition: Thread.cc:196
bool wasError_
Definition: Thread.h:192
void broadcastReady()
Definition: Thread.cc:348