39 #include "blocxx/BLOCXX_config.h"
58 #ifdef BLOCXX_HAVE_OPENSSL
59 #include <openssl/err.h>
63 namespace BLOCXX_NAMESPACE
93 ::memset(&zthr, 0,
sizeof(zthr));
97 static Thread_t NULLTHREAD = zeroThread();
100 sameId(
const Thread_t& t1,
const Thread_t& t2)
112 , m_cancelRequested(0)
122 if (!sameId(
m_id, NULLTHREAD))
145 "Thread::start - thread is already running");
147 if (!sameId(
m_id, NULLTHREAD))
150 "Thread::start - cannot start previously run thread");
155 ThreadParam* p =
new ThreadParam(
this, cb, thread_barrier);
161 thread_barrier.
wait();
173 Format(
"Thread::join - ThreadImpl::joinThread: %1(%2)",
174 errno, strerror(errno)).c_str());
185 Thread_t theThreadID;
191 ThreadParam* pParam =
static_cast<ThreadParam*
>(paramPtr);
192 Thread* pTheThread = pParam->thread;
194 theThreadID = pTheThread->
m_id;
199 thread_barrier.
wait();
203 rval = pTheThread->
run();
212 std::clog <<
"!!! Exception: " << ex.
type() <<
" caught in Thread class\n";
213 std::clog << ex << std::endl;
222 catch (std::exception& ex)
225 std::clog <<
"!!! std::exception: " << ex.what() <<
" caught in Thread class" << std::endl;
237 std::clog <<
"!!! Unknown Exception caught in Thread class" << std::endl;
254 std::clog <<
"!!! Exception: " << ex.
type() <<
" caught in Thread class\n";
255 std::clog << ex << std::endl;
262 catch (std::exception& ex)
265 std::clog <<
"!!! std::exception: " << ex.what() <<
" caught in Thread class" << std::endl;
275 std::clog <<
"!!! Unknown Exception caught in Thread class" << std::endl;
299 cb->notifyThreadDone(
this);
301 #ifdef BLOCXX_HAVE_OPENSSL
333 #if !defined(BLOCXX_WIN32)
366 #if !defined(BLOCXX_WIN32)
385 BLOCXX_LOG_DEBUG3(logger,
"Thread::definitiveCancel waiting for thread to exit.");
393 BLOCXX_LOG_ERROR(logger,
"Thread::definitiveCancel cancelling thread because it did not exit!");